Ich erstelle eine mobile App und verwende JWT zur Authentifizierung.
Der beste Weg, dies zu tun, scheint darin zu bestehen, das JWT-Zugriffstoken mit einem Aktualisierungstoken zu koppeln, damit ich das Zugriffstoken so oft ablaufen kann, wie ich möchte.
- Wie sieht ein Aktualisierungstoken aus? Ist es eine zufällige Zeichenfolge? Ist diese Zeichenfolge verschlüsselt? Ist es ein anderes JWT?
- Das Aktualisierungstoken würde für den Zugriff in der Datenbank des Benutzermodells gespeichert, richtig? Es scheint, als sollte es in diesem Fall verschlüsselt werden
- Würde ich das Aktualisierungstoken nach einer Benutzeranmeldung zurücksenden und den Client dann auf eine separate Route zugreifen lassen, um ein Zugriffstoken abzurufen?
security
authentication
oauth-2.0
jwt
jtmarmon
quelle
quelle
Antworten:
Angenommen, es handelt sich um OAuth 2.0, da es sich um JWTs und Aktualisierungstoken handelt ...:
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 Autorisierungsserver zustandslos sein oder dem Client, der ihn präsentiert, eine Art "Proof-of-Besitz" -Semantik aufzwingen 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 ursprünglich ausgestellt hat, sodass die in sich geschlossene Validierungsoptimierung für JWTs als Zugriffstoken dies tut Nicht für Aktualisierungstoken halten
das hängt von der Sicherheit / dem Zugriff der Datenbank ab; Wenn andere Parteien / Server / Anwendungen / Benutzer auf die Datenbank zugreifen können, dann ja (aber Ihr Kilometerstand kann variieren, je nachdem, wo und wie Sie den Verschlüsselungsschlüssel speichern ...)
Ein Autorisierungsserver kann je nach der vom Client zum Abrufen verwendeten Berechtigung gleichzeitig Zugriffstoken und Aktualisierungstoken ausstellen. Die Spezifikation enthält die Details und Optionen zu jedem der standardisierten Zuschüsse
quelle
Im Folgenden finden Sie die Schritte zum Widerrufen Ihres JWT-Zugriffstokens:
Bitte lassen Sie mich wissen, wenn Sie weitere Details benötigen. Ich kann den Code (Java + Spring Boot) auch freigeben.
Für Ihre Fragen:
Q1: Es ist ein weiteres JWT mit weniger Ansprüchen und langer Ablaufzeit.
F2: Es wird nicht in einer Datenbank sein. Das Backend wird nirgendwo gespeichert. Sie entschlüsseln das Token einfach mit einem privaten / öffentlichen Schlüssel und validieren es auch mit seiner Ablaufzeit.
F3: Ja, richtig
quelle
localStorage
und dasrefreshToken
in einem gespeichert werdenhttpOnly
. DasrefreshToekn
kann verwendet werden, um ein neues JWT zu erhalten, daher muss es mit besonderer Vorsicht behandelt werden.Basierend auf dieser 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 ist dies sinnvoll, da ein Benutzer in verschiedenen Clientanwendungen angemeldet sein kann und über ein Aktualisierungstoken pro App verfügen kann. Wenn der Benutzer ein Gerät mit einer installierten App verliert, kann das Aktualisierungstoken dieses Geräts ungültig werden, ohne dass dies Auswirkungen auf die anderen angemeldeten Geräte hat.
3) In dieser Implementierung antwortet es auf die Anmeldemethode mit Zugriffstoken und Aktualisierungstoken. Es scheint mir richtig zu sein.
quelle
iat
JWT
Sie wollen, um dasrefresh_token
Innere darin zu haben ? Wenn ja, sagt OAuth RFC 6749 ausdrücklich, dass nichtrefresh_token
an den Ressourcenserver gesendet werden soll (und dasJWT
wird an die Ressourcenserver gesendet): tools.ietf.org/html/rfc6749#section-1.5