2017-10-06 7 views
1

Ich muss das CSRF-Token in einem OData-Modell zurücksetzen. Basierend auf der UI5-Dokumentation versuche ich das mit refreshSecurityToken(fnSuccess?, fnError?, bAsync?) Funktion zu tun. (click here for reference)SAP GATEWAY & UI5: Wie kann das CSRF-Token zurückgesetzt werden? =

Ich schrieb den folgenden Code:

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 
    }); 

Das Problem ist, dass dieses Token nicht für 30 Minuten zurückgesetzt und das ist unsere Session-Timeout. Tatsächlich ist es während der Lebensdauer der Sitzung gültig. Ich habe auch den folgenden Link:

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

Eigentlich viele Menschen dieses Problem hatte, aber ich konnte keine klare Lösung für das Zurücksetzen des Token finden. Ich habe alle notwendigen Schritte im Front-End durchgeführt, um eine Head-Anfrage zum Ausruhen des Tokens zu senden. Ich denke, etwas fehlt in Bezug auf die Back-End-Gateway-Einstellungen oder ABAP-Codierung.

Was muss ich tun?

Antwort

0

Sie können ein CSRF-Token (pro Benutzer/Token) über die Transaktion SM05 löschen.

+0

Ich werde es überprüfen. Weitere Funktionsbausteine ​​zum Zurücksetzen des CSRF-Tokens und nicht zum Löschen? –

+0

Was meinst du mit zurücksetzen? Warum möchten Sie das Token genau zurücksetzen? – mash

+0

Es muss zurückgesetzt werden, um eine neue Datei an CMS senden zu können. –

-1

scheint, dass Sie ein Intervall in Ihrer Front-End-Anwendung festlegen müssen, um das Token häufiger abzurufen und zu aktualisieren. Aber das ist ein Paradox: Wenn Ihr Back-End die Auszeit für 30 Minuten setzt, warum sollten Sie es für längere Zeit live halten?

SecurityToken Timeout ist wichtig, um sicherzustellen, dass die aktive Sitzung verwendet wird und dass keine Person sie "vergessen" hat und das System offen und unbeaufsichtigt/unbenutzt gelassen hat.

Aber wenn Sie wirklich Ihre Front-End-Sitzung immer zur Verfügung halten müssen und zwingen das Back-End zu sein, können Sie setInterval(), um die CSRF zu holen und die Anwendung aktualisieren:

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 

Und Dann sollten Sie Ihr neues Token in der Token-Variablen speichern und das Hochladen zulassen, wenn das Token zurückgesetzt wird.

Mit freundlichem Gruß, Henrique Mattos