2014-12-31 20 views
31

Ich baue eine mobile App und verwende JWT zur Authentifizierung.JWT Refresh Token Fluss

Es scheint, als ob der JWT-Zugriffstoken mit einem Aktualisierungstoken gekoppelt werden muss, damit das Zugriffstoken beliebig oft ablaufen kann.

  1. Wie sieht ein Refresh-Token aus? Ist es eine zufällige Zeichenfolge? Ist diese Zeichenfolge verschlüsselt? Ist es ein anderes JWT?
  2. Das Aktualisierungstoken würde in der Datenbank auf dem Benutzermodell für den Zugriff gespeichert werden, richtig? Es scheint, als sollte es in diesem Fall verschlüsselt werden.
  3. Würde ich das Refresh-Token nach einer Benutzeranmeldung zurücksenden und dann den Client auf eine separate Route zugreifen lassen, um ein Zugriffstoken abzurufen?
+1

Hinweis: Wenn Sie Aktualisierungstoken verwenden, sollten Sie Benutzern die Möglichkeit geben, sie auf der Benutzeroberfläche ungültig zu machen. Es wird auch empfohlen, sie automatisch zu verfallen, wenn sie beispielsweise für einen Monat nicht verwendet werden. –

+0

@jtmarmon: Wie speichern Sie das Aktualisierungstoken auf der Clientseite? Ich meine das Android-Gerät mit Sicherheit? – j10

Antwort

11

Unter der Annahme, dass dies über OAuth 2.0 ist, da es über JWTs ist und aktualisieren Token ...:

  1. wie ein Zugriffstoken im Prinzip eine Aktualisierungs-Token alles einschließlich alle das sein können Optionen, die Sie beschreiben; ein JWT könnte verwendet werden, wenn der Autorisierungsserver staatenlos sein möchte oder eine Art "Besitzbeweis" -Semantik auf dem Client, der ihn präsentiert, erzwingen möchte; Beachten Sie, dass sich ein Aktualisierungstoken von einem Zugriffstoken dadurch unterscheidet, dass es nicht einem Ressourcenserver, sondern nur dem Autorisierungsserver präsentiert wird, der es an erster Stelle ausgegeben hat, also die eigenständige Validierungsoptimierung für JWTs-as-access-tokens nicht für Refresh-Token halten

  2. hängt von der Sicherheit/dem Zugriff auf die Datenbank ab; Wenn auf die Datenbank von anderen Parteien/Servern/Anwendungen/Benutzern zugegriffen werden kann, dann ja (aber Ihre Laufleistung hängt davon ab, wo und wie Sie den Verschlüsselungsschlüssel speichern ...)

  3. Ein Autorisierungsserver kann beide Zugriffstoken ausgeben und Aktualisieren von Token gleichzeitig, abhängig von der Berechtigung, die vom Client verwendet wird, um sie zu erhalten; die Spezifikation enthält die Details und Optionen auf jedem der standardisierten Zuschüsse

+1

2. Sie sollten einen Hash des Aktualisierungstokens in Ihrer Datenbank speichern und dann den Hash des Aktualisierungs-Tokens des Benutzers mit Ihrem gespeicherten Hash vergleichen. Die Regel "Passwörter nicht in der Datenbank speichern" folgt hier. Betrachten Sie ein Token wie ein zufälliges Passwort, das Sie für den Benutzer erstellt haben. – Rohmer

10

in diesem implementation with Node.js of JWT with refresh token Basierend:

1) In diesem Fall sind sie eine uid verwenden und es ist kein JWT. Wenn sie das Token aktualisieren, senden sie das Aktualisierungstoken und den Benutzer. Wenn Sie es als JWT implementieren, müssen Sie den Benutzer nicht senden, da dies im JWT geschehen würde.

2) Sie implementieren dies in einem separaten Dokument (Tabelle). Es hat für mich Sinn, weil ein Benutzer in verschiedenen Client-Anwendungen angemeldet sein kann und ein Refresh-Token per App haben kann. Wenn der Benutzer ein Gerät verliert, auf dem eine Anwendung installiert ist, kann das Aktualisierungstoken dieses Geräts ungültig werden, ohne dass sich dies auf die anderen angemeldeten Geräte auswirkt.

3) In dieser Implementierung reagiert es auf die Anmeldemethode mit Zugriffstoken und Aktualisierungstoken. Es scheint mir richtig zu sein.