2015-08-23 12 views
10

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

  1. Der Benutzer authentifiziert sich über normale Benutzername/Passwort oder über Facebook
  2. Die PHP-Backend erzeugt ein Token mit einem Ablaufzeit von 30 Minuten und sendet sie an den AngularJS Client
  3. Das JWT Token in $ gespeichert wird localStorage
  4. Der JWT-Token wird mit Hilfe eines Interceptors in jeden Request-Header injiziert
  5. Alle Slim-Routen, die Authentifizierung benötigen, überprüfen das gesendete Token mithilfe einer Middleware.
  6. Wenn das Token ungültig ist (abgelaufen, wurde manipuliert, ist für diese bestimmte Rolle nicht geeignet), reagiert Slim mit einem 401/403-Fehler.
  7. Ein winkliger Dienst überprüft jede Minute, wenn der Token kurz vor dem Ablauf steht
  8. Wenn das Token kurz vor dem Ablauf steht (5 bis 1 Minuten), bucht der Dienst das alte Token an einen anderen API-Endpunkt.
  9. Der API-Endpunkt überprüft die Gültigkeit des Tokens und antwortet mit einem neuen mit einer Ablaufzeit von +30 Minuten.
  10. Der zuvor erwähnte Abrufdienst ersetzt das alte Token in $ localStorage.
  11. Spülen und wiederholen.

NB: SSL wird in der Produktion

Bounty vergeben @Valdas umgesetzt werden, da er der einzige war, der

+1

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/ –

+0

@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? –

Antwort

4

tatsächlich beantwortet Es besteht keine Notwendigkeit Token Ablauf Schleife Kontrolle ist. Ich benutze https://github.com/auth0/angular-jwt als eine Bibliothek für meine Angular-Projekte, die eine Möglichkeit bietet, Token zu aktualisieren, kurz bevor die HTTP-Anforderung ausgelöst wird, wodurch der Authentifizierungsmechanismus vereinfacht wird.

Sie könnten auch Token aus Anfrage entfernen, wenn es eine Vorlage lädt (endet mit .html), aber dies ist nur eine persönliche Vorliebe.

+0

Vielen Dank @Valdas, aber die Schleife dient einem Zweck: Es lässt das Token nicht ablaufen, während der Browser geöffnet ist, auch wenn es keine Benutzeraktivität oder Anfrage gibt. Wie für alle Annehmlichkeiten, die die eckige jwt-Bibliothek bietet, werde ich wahrscheinlich in meinen nächsten Projekten verwenden. –

Verwandte Themen