Welche Techniken sind sinnvoll, um CSRF-Schutz mit RESTful-APIs zu kombinieren?

Mich interessiert, welche Ansätze die Leute beim Erstellen einer RESTful-API (oder einer Quasi-RESTful-API) für ihre Webanwendungen verfolgt haben.

Ein praktisches Beispiel:

Angenommen, Sie haben eine herkömmliche browserbasierte Webanwendung, die in allen Formularen CSRF-Schutz verwendet. Eine verborgene Eingabe mit einem CSRF-Schutz-Token ist in jedem im Browser angezeigten Formular enthalten. Wenn diese Eingabe beim Absenden des Formulars nicht mit der serverseitigen Version des Tokens übereinstimmt, wird das Formular als ungültig betrachtet.

Angenommen, Sie möchten die Webanwendung als API verfügbar machen (möglicherweise mithilfe von JSON anstelle von HTML). Traditionell habe ich beim Veröffentlichen einer API Transaktionen als einseitig betrachtet (dh der API-Konsument erstellt die Anforderung auf der Grundlage der veröffentlichten API, anstatt zuerst ein Formular anzufordern und dann eine Anforderung mithilfe des zurückgegebenen Formulars zu erstellen).

Der "einseitige" Ansatz bricht zusammen, wenn Dinge wie der CSRF-Schutz eine Rolle spielen. Der CSRF-Schutz-Token muss in alle vom API-Verbraucher gesendeten POSTS / PUTS / DELETES einbezogen werden.

Ich habe versucht zu überlegen, wie ich das am besten angehen kann. Es scheint sehr umständlich zu sein, jedes Mal ein Formular anzufordern, wenn ein API-Aufruf ausgeführt werden muss (insbesondere bei asynchronen Vorgängen), aber alle anderen Alternativen, die ich mir selbst überlegt habe, scheinen den CSRF-Schutz zu umgehen (oder zumindest Löcher in ihn zu schlagen) ), was nicht akzeptabel ist.

Hat jemand von euch einen Einblick in das?

Vielen Dank.

(Nicht, dass es zu viel ausmachen sollte, da das Problem konzeptionell und plattformunabhängig ist, aber ich habe es mit einem traditionellen LAMP-Stack zu tun und verwende Symfony 1.4 als mein Anwendungsframework. Mein Ziel ist es, eine Web-API im JSON-Format zu veröffentlichen, die Entwicklern die Verwendung ermöglicht um mobile / Desktop-Apps zu erstellen, die mit einer vorhandenen Webanwendung gut funktionieren.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage