In diesem Artikel zeigen wir Ihnen, wie Sie ein CSRF-Token und ein Cookie aus den Antwortheadern eines REST-Aufrufs abrufen und beide Werte als Eingabeparameter in einem anderen REST-Aufruf verwenden können, um Anfragen zu autorisieren.
Voraussetzungen
Sie benötigen einen konfigurierten REST-Konnektor für eine REST-API, die mit CSRF-Token/Cookies arbeitet, um unbefugten Zugriff zu verhindern.
Was ist ein CSRF-Token?
CSRF steht für “Cross-Site Request Forgery” und ist eine Art böswilliger Angriff auf webbasierte Anwendungen. Bei CSRF-Angriffen werden bösartige Befehle unwissentlich von vertrauenswürdigen Benutzern übermittelt. Wenn sich ein Benutzer erfolgreich bei einer Anwendung angemeldet hat, ist dieser Benutzer berechtigt, Befehle (z. B. zum Erstellen/Aktualisieren von Daten) an das Backend zu senden. Bei CSRF-Angriffen werden diese Befehle im Hintergrund gesendet, ohne dass der Benutzer davon weiß. Da die Benutzerberechtigung und die Parameter dieser Befehle aus einer vertrauenswürdigen Quelle stammen, wird der Befehl als gültig behandelt und daher ausgeführt. Um CSRF-Angriffe zu verhindern, können Webanwendungen, die JavaScript verwenden, die sogenannte ” Cookie-to-Header-Token”-Technik verwenden. Bei dieser Technik wird von der Anwendung ein Cookie generiert, das ein zufälliges Token für die Sitzung enthält. Dieses zufällige Token wird dann zu den Header-Parametern (CSRF-Token-Header) jeder Anforderung an den Server hinzugefügt, und der Server kann die Anforderung validieren. Lesen Sie mehr zu diesem Thema in diesem Artikel.
Die Cookie-to-Header-Token-Technik in Simplifier
Im folgenden Abschnitt zeigen wir Ihnen, wie Sie eine REST-API integrieren, die die “Cookie-to-Header-Token”-Technik in Simplifier verwendet.
Schritt 1: Rufen Sie das CSRF-Token und das Cookie ab
Zuerst müssen wir ein CSRF-Token und ein Cookie vom Server über die REST-API anfordern. Die genauen Parameter, die für diese Anforderung erforderlich sind, hängen von der verwendeten REST-API ab. In unserem Beispiel haben wir einen REST-Konnektor mit dem Namen “Test”. Dieser Connector verfügt über einen Aufruf namens “getToken”. Mit diesem Aufruf werden ein CSRF-Token und ein Cookie vom Server angefordert. Das CSRF-Token und das Cookie werden als Antwortheader gesendet. Um diese Antwortheader in das Ergebnis einzubeziehen, wechseln wir in die erweiterte Ansicht der Detailansicht des Konnektoraufrufs und fügen einen zusätzlichen Eingabeparameter hinzu: ‘configuration/http/verbosity/headers‘. Wir setzen den Wert auf ‘Verbose‘. Bei dieser zusätzlichen Konfiguration enthält das Ergebnis des Connectoraufrufs auch die Antwortheader. Weitere Informationen zu zusätzlichen Konnektorparametern finden Sie in unserer Dokumentation.
Wir werden diesen Konnektoraufruf in einem serverseitigen Geschäftsobjekt verwenden und das Ergebnis speichern. Dann extrahieren wir die Werte für das CSRF-Token und das Cookie aus dem Ergebnisobjekt. In unserem Beispiel sieht das so aus (prüfen Sie jedoch immer, wie Ihr Ergebnisobjekt aufgebaut ist):
var oResult = Simplifier.Connector.Test.getToken().result; var myToken = oResult.Headers["x-csrf-token"].value; var aCookies = oResult.Headers.filter(function(oHeader) { return oHeader.name === "Set-Cookie"; });
Als nächstes müssen wir den relevanten Teil (CSRF-Teil) aus dem Cookie extrahieren, da er in der Regel auch andere Informationen enthält. In unserem Beispiel erreichen wir dies durch die Verwendung der JavaScript-Funktion “map”. Um zu überprüfen, ob wir den richtigen Teil extrahiert haben, können wir die Simplifier Log API verwenden und den Wert des Cookies protokollieren. Der Protokolleintrag ist im Abschnitt Protokolle und Überwachung unter dem Reiter “Protokolle” sichtbar.
var sCookie = aCookies.map(function(oCookie) { return oCookie.value.split(";")[0]; }).join("; "); Simplifier.Log.info("cookie " + sCookie, sCookie);
Schritt 2: Verwenden Sie das CSRF-Token und das Cookie in einem anderen Aufruf
Nachdem wir nun das CSRF-Token und das Cookie extrahiert haben, können wir beide Werte verwenden, um andere Anfragen zu autorisieren. In unserem Beispiel verwenden wir sie als Header-Parameter für den Konnektoraufruf ‘PatchCorporateAccountCollection’.
In unserer serverseitigen Business-Objekt-Funktion rufen wir diesen Konnektoraufruf mit den jeweils abgerufenen Werten des CSRF-Tokens und des Cookies auf:
var patchRequest = Simplifier.Connector.Test.PatchCorporateAccountCollection({ path: "CorporateAccountCollection('" + input.objectid + "')", postBody: { "ERP_ID_KUT": input.ERP_KUT_ID }, token: myToken, cookie: sCookie // cookie can look like this: "sap-login-XSRF_LP8=20220804073501-9ymw9yQLYRRTWVtpZ1QfYA%3d%3d;" }); output = patchRequest;
Die Werte des CSRF-Tokens und des Cookies werden nun vom Server validiert.
Wenn die Validierung erfolgreich ist, wird die Anforderung ausgeführt.