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.
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.
Sie benötigen einen konfigurierten REST-Konnektor für eine REST-API, die mit CSRF-Token/Cookies arbeitet, um unbefugten Zugriff zu verhindern.
CSRF steht für „Cross-Site Request Forgery“ und ist eine Art von bösartigem 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 an das Backend zu senden (z. B. zum Erstellen/Aktualisieren von Daten). Bei CSRF-Angriffen werden diese Befehle im Hintergrund gesendet, ohne dass der Benutzer davon weiß. Da die Benutzerautorisierung und die Parameter dieser Befehle von 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 so genannte „Cookie-to-Header-Token“-Technik einsetzen. Bei dieser Technik wird von der Anwendung ein Cookie erzeugt, 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 Anfrage an den Server hinzugefügt, und der Server kann die Anfrage validieren.
Lesen Sie mehr über dieses Thema in diesem Artikel.
Im folgenden Abschnitt zeigen wir Ihnen, wie Sie eine REST-API integrieren, die die “Cookie-to-Header-Token”-Technik in Simplifier verwendet.
Zunächst müssen wir über die REST-API ein CSRF-Token und ein Cookie vom Server anfordern. Die genauen Parameter, die für diese Anforderung erforderlich sind, hängen von der von Ihnen verwendeten REST-API ab.
In unserem Beispiel haben wir einen REST-Konnektor namens „Test“. Dieser Konnektor hat 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 Antwort-Header gesendet. Um diese Antwort-Header in das Ergebnis einzubeziehen, wechseln wir in die erweiterte Ansicht der Detailansicht des Verbindungsaufrufs und fügen einen zusätzlichen Eingabeparameter hinzu:„configuration/http/verbosity/headers“. Wir setzen den Wert auf„Verbose“ (In den meisten Fällen sollte„Normal“ ausreichend sein. Verwenden Sie „Verbose“ nur, wenn die unten erläuterten Token-Informationen im „Normal“-Modus nicht angezeigt werden). Mit dieser zusätzlichen Konfiguration enthält das Ergebnis des Konnektoraufrufs auch die Antwort-Header. Weitere Informationen über zusätzliche Konnektorparameter 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 den Cookie aus dem Ergebnisobjekt. In unserem Beispiel sieht das so aus (überprüfen Sie jedoch immer, wie Ihr Ergebnisobjekt strukturiert 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);
Nachdem wir nun das CSRF-Token und das Cookie extrahiert haben, können wir beide Werte zur Autorisierung anderer Anfragen verwenden.
In unserem Beispiel verwenden wir sie als Kopfparameter 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.