Best Practice: Implementierung einer API für eine SPA und native mobile Apps mit Laravel

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.721
Hallo zusammen,
ich habe mit Laravel ein Projekt erstellt und bin momentan ein wenig ratlos und habe ein paar Fragen...

Derzeit habe ich eine stateless API mit Laravel Sanctum implementiert. Warum ist meine API stateless? Weil ich meine API sowohl in einer SPA als auch in einer nativen mobilen App für iOS und Android nutzen möchte. Mein Projekt/API verfügt über sehr standardisierte CRUD-Funktionalitäten wie Registrierung, Anmeldung, Einreichen von Beiträgen, Kommentieren von Beiträgen, Liken und Disliken von Beiträgen usw.

Allerdings fange ich an, mich zu fragen, ob eine stateless Laravel Sanctum API der richtige Weg war. Denn der Grund dafür ist der CORS-Schutz und das XSS Injection Problem.

Meine Fragen sind:
1. Brauche ich CSRF/CORS-Schutz für meine API?
2. Wenn ein CSRF/CORS-Schutz notwendig ist, kann ich diesen in meiner stateless Laravel Sanctum API implementieren?
3. Kann ich auch eine statefull API verwenden, wenn ich eine API sowohl für SPA als auch für native mobile Apps implementiere und welche Vorteile hat eine statefull API?
4. Der Token, der von Laravel Sanctum ausgegeben wird, läuft standardmäßig nicht ab. Gibt es irgendwelche Sicherheitsbedenken bezüglich eines unbegrenzt gültigen Tokens?
5. Wäre es eine bessere Idee, Laravel Passport zu verwenden und eine OAuth 2-Authentifizierung zu implementieren, die von einer SPA und nativen mobilen Anwendungen verwendet werden kann?

Schon mal vorab vielen Dank für eure Hilfe!

Vielen Dank!
 
Ich kenn mich mit Laravel nicht aus aber
1. CSRF Schutz ist immer sinnvoll, gibt es auch genug Erklärungen im Internet dazu warum.
3. Statefull kann man implementieren, aber wird wohl für ein Forum nicht so viel Sinn machen. Was ist der Vorteil bei einem Forum den Zustand eines jeden Benutzers zu verwalten? Einem Forum ist es sicher egal, ob ein User vorher einen Beitrag geliked hat und jetzt einen neuen Beitrag schreibt. Jede Aktion ist doch unabhängig von der vorherigen und der Server darf ruhig vergessen, was der Benutzer bei der letzten Anfrage gemacht hat.
4. Das ist immer ein Trade off zwischen Komfort und Sicherheit. Nicht ablaufende Token sind praktischer für den Benutzer aber auch besser für einen Angreifer. Wenn der Token mal geklaut wird, dann hat der Dieb unendlich lange Zugriff. Deshalb gibt es auch sowas wie Refresh Tokens und Access Tokens, wo Access Tokens nur eine kurze Lebensdauer haben und Refresh Token dazu da sind sich neue Access Tokens zu holen.
 
1. +1
3. Kommt drauf an was mit "State" gemeint ist, aber normalerweise wird ein Teil vom State, der nicht als "Daten" gilt, in der App selber gehalten. Hast du da Beispiele?
 
So wie ich es bisher verstanden habe, benötige ich für meine API, die einer Webseite aufgerufen wird, CSRF Schutz, da diese Javascript ausführt und modifiziert werden kann (XSS Injection). Somit sollte ich die Statefull Laravel Sanctum API verwenden.

Für eine native mobile App wie iOS und Android kann ich auch eine Stateless API verwenden, die keine CSRF Protection hat. Denn im Gegensatz zu einer Webseite, diese kein JavaScript Code lädt und dann ausführt. Macht das so Sinn?
 
Zurück
Oben