Ich würde gerne wissen, ob was ich bisher getan habe, ist eine solide Möglichkeit zur Authentifizierung/Erneuerung der Token und ob es irgendwelche Fehler oder Schwachstellen, die ich beachten sollte als ich versuchte, Datenbankinteraktion auf Null zu beschränken. Hier geht.Angularjs und schlanke Framework JWT-Authentifizierung und Token Refresh-Fluss
- Der Benutzer authentifiziert sich über normale Benutzername/Passwort oder über Facebook
- Die PHP-Backend erzeugt ein Token mit einem Ablaufzeit von 30 Minuten und sendet sie an den AngularJS Client
- Das JWT Token in $ gespeichert wird localStorage
- Der JWT-Token wird mit Hilfe eines Interceptors in jeden Request-Header injiziert
- Alle Slim-Routen, die Authentifizierung benötigen, überprüfen das gesendete Token mithilfe einer Middleware.
- Wenn das Token ungültig ist (abgelaufen, wurde manipuliert, ist für diese bestimmte Rolle nicht geeignet), reagiert Slim mit einem 401/403-Fehler.
- Ein winkliger Dienst überprüft jede Minute, wenn der Token kurz vor dem Ablauf steht
- Wenn das Token kurz vor dem Ablauf steht (5 bis 1 Minuten), bucht der Dienst das alte Token an einen anderen API-Endpunkt.
- Der API-Endpunkt überprüft die Gültigkeit des Tokens und antwortet mit einem neuen mit einer Ablaufzeit von +30 Minuten.
- Der zuvor erwähnte Abrufdienst ersetzt das alte Token in $ localStorage.
- Spülen und wiederholen.
NB: SSL wird in der Produktion
Bounty vergeben @Valdas umgesetzt werden, da er der einzige war, der
Es gibt einen guten Artikel darüber, wo die JWT zu lagern ist. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –
@MikaTuupola Danke für den Tipp. Ich werde das Token in einem Cookie für zusätzlichen Schutz speichern. Ich habe den dort erwähnten Anti-CSRF-Mechanismus bereits implementiert und einen Blick auf Ihre schlanke jwt-auth-Middleware geworfen. Gute Arbeit! Ich habe meine eigene sehr einfache Middleware gerollt, aber deine ist definitiv die beste. Ich muss es versuchen. Ist das cookie/localStorage-Problem das einzige, was mit meiner Logik _wrong_ erscheint? –