2017-10-06 8 views
1

J'ai besoin de réinitialiser le jeton CSRF dans un modèle OData. Basé sur la documentation d'UI5 j'essaye de faire cela avec la fonction refreshSecurityToken(fnSuccess?, fnError?, bAsync?). (click here for reference)SAP GATEWAY & UI5: Comment réinitialiser le jeton CSRF? =

j'ai écrit le code suivant:

var oDataModel = this.getOwnerComponent().getModel("ZMDM_ODATA_FILE_SRV"); 
    oDataModel.setTokenHandlingEnabled(true); 
    oDataModel.refreshSecurityToken(function() { 
     var token = oDataModel.getSecurityToken(); 
     console.log(token); 
     // can upload the file if token reset 
    }); 

Le problème est que ce jeton est pas remis à zéro pendant 30 minutes et qui est notre délai d'attente de la session. En fait, il est valide pendant la durée de la session. J'ai même vérifié le lien suivant:

https://blogs.sap.com/2014/08/26/gateway-protection-against-cross-site-request-forgery-attacks/

En fait, beaucoup de gens ont eu ce problème, mais je ne pouvais pas trouver une solution claire pour réinitialiser le jeton. J'ai fait toutes les étapes requises dans le front-end pour l'envoi d'une requête Head pour le repos du jeton. Je pense qu'il manque quelque chose concernant les paramètres de la passerelle dorsale ou le codage ABAP.

Que dois-je faire?

Répondre

0

Vous pouvez supprimer un jeton CSRF (par utilisateur/jeton) via la transaction SM05.

+0

Je vais vérifier. Tous les autres modules de fonction pour réinitialiser le jeton CSRF et ne pas supprimer? –

+0

Que voulez-vous dire par réinitialisation? Pourquoi voulez-vous réinitialiser le jeton exactement? – mash

+0

Il doit être réinitialisé pour pouvoir envoyer un nouveau fichier à CMS. –

-1

Il semble que vous ayez besoin de définir un intervalle dans votre application frontale pour récupérer et mettre à jour le jeton plus souvent. Mais c'est un paradoxe: si votre back-end fixe le délai d'attente de 30 minutes, pourquoi le garderiez-vous en direct pour plus de temps?

SecurityToken timeout est important pour s'assurer que la session active est utilisée et qu'aucun individu ne l'a «oublié» et a laissé le système ouvert et non-utilisé/inutilisé.

Mais si vous avez vraiment besoin de garder votre session front-end toujours disponible et forcer l'arrière-plan trop, vous pouvez setInterval() pour aller chercher le CSRF et mettre à jour l'application:

var oDataModel = this.getOwnerComponent().getModel("ZMDM_ODATA_FILE_SRV"); 
oDataModel.setTokenHandlingEnabled(true); 
var fnRefreshToken = oDataModel.refreshSecurityToken(function() { 
    var token = oDataModel.getSecurityToken(); 
    console.log(token); 
    // can upload the file if token reset 
}); 
window.setInterval(function(){ 
    fnRefreshToken; 
}, 1800000); // where 1.800.000 miliseconds represents 30 minutes 

Et Vous devez ensuite stocker votre nouveau jeton dans la variable jeton et autoriser le téléchargement si le jeton est réinitialisé.

ce qui a trait Bienveillantes, Henrique Mattos