it-swarm.com.de

JWT-Aktualisierungstokenfluss

Ich erstelle eine mobile App und verwende JWT zur Authentifizierung.

Dies lässt sich am besten erreichen, indem Sie das JWT-Zugriffstoken mit einem Aktualisierungstoken koppeln, damit das Zugriffstoken so oft ich möchte ablaufen kann.

  1. Wie sieht ein Aktualisierungstoken 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, richtig? In diesem Fall sollte es anscheinend verschlüsselt sein
  3. Würde ich das Aktualisierungstoken nach einer Benutzeranmeldung zurücksenden und dann den Client auf eine separate Route zugreifen lassen, um ein Zugriffstoken abzurufen?
79
jtmarmon

Angenommen, es handelt sich um OAuth 2.0, da es sich um JWTs und Aktualisierungstoken handelt ...:

  1. genau wie ein Zugriffstoken kann ein Aktualisierungstoken im Prinzip alles sein, einschließlich aller von Ihnen beschriebenen Optionen. Ein JWT kann verwendet werden, wenn der Authorization Server zustandslos sein oder dem Client, der es vorlegt, eine Art "Besitznachweis" -Semantik aufzwingen möchte. Beachten Sie, dass ein Aktualisierungstoken sich von einem Zugriffstoken dadurch unterscheidet, dass es nicht an einen Ressourcenserver, sondern nur an den Authorization Server gesendet wird, von dem es ursprünglich ausgestellt wurde Nicht für Refresh-Token aufbewahren

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

  3. ein Autorisierungsserver kann in Abhängigkeit von der Berechtigung, mit der der Client sie erhält, sowohl Zugriffstoken als auch Aktualisierungstoken gleichzeitig ausstellen. Die Spezifikation enthält die Details und Optionen der einzelnen standardisierten Zuschüsse

25
Hans Z.

Basierend auf diesem Implementierung mit Node.js von JWT mit Aktualisierungstoken :

1) In diesem Fall verwenden sie eine UID und es ist keine 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 es sich innerhalb des JWT befinden würde.

2) Sie implementieren dies in einem separaten Dokument (Tabelle). Für mich hat es Sinn, dass ein Benutzer in verschiedenen Client-Anwendungen angemeldet sein kann und ein Aktualisierungstoken pro App erhalten kann. Wenn der Benutzer ein Gerät mit einer installierten App verliert, kann das Aktualisierungstoken dieses Geräts ungültig werden, ohne dass die anderen angemeldeten Geräte davon betroffen sind.

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

19
David

Im Folgenden finden Sie die Schritte zum Widerrufen Ihres JWT-Zugriffstokens:

1) Wenn Sie sich anmelden, senden Sie dem Client zwei Token (Zugriffstoken, Token aktualisieren).
2) Das Zugriffstoken hat eine kürzere Ablaufzeit und die Aktualisierungszeit eine lange Ablaufzeit.
3) Der Client (Front-End) speichert das Aktualisierungstoken in seinem lokalen Speicher und das Zugriffstoken in Cookies.
4) Der Client verwendet das Zugriffstoken zum Aufrufen von apis. Aber wenn es abläuft, wählen Sie das Aktualisierungstoken aus dem lokalen Speicher und rufen Sie die Authentifizierungsserver-API auf, um das neue Token abzurufen.
5) Auf Ihrem Authentifizierungsserver ist eine API verfügbar, die ein Aktualisierungstoken akzeptiert, dessen Gültigkeit überprüft und ein neues Zugriffstoken zurückgibt.
6) Sobald das Aktualisierungstoken abgelaufen ist, wird der Benutzer abgemeldet.

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Ich kann den Code auch freigeben (Java + Spring Boot).

Für Ihre Fragen:
Que 1: Es ist ein weiteres JWT mit weniger Behauptungen, die mit einer langen Verfallszeit eingereicht wurden.

Que 2: Es wird nicht in der Datenbank sein. Backend wird nirgendwo gespeichert. Sie entschlüsseln nur das Token mit privatem/öffentlichem Schlüssel und validieren es auch mit seiner Ablaufzeit.

Que3: Ja, richtig

15
Bhupinder Singh