Ich weiß, es gibt bereits viele Beiträge über Oauth, Oauth2, JWT, etc .. Ich habe viele gelesen und ich mehr verwirrt als je zuvor, so bin ich auf der Suche nach etwas Klärung. Ich werde meine Meinung zu dem Thema vorschlagen, und ich hoffe, dass mir jemand sagen kann, ob meine Umsetzung sicher genug ist oder was ich falsch mache und wie ich es verbessern kann.Understanding authentication flow mit refresh und access tokens auf nodejs app
Ich baue einen API-Rest-Server, um meine Ressourcen an meine Benutzer zu liefern. Nehmen wir an, es handelt sich um eine Bank-App, mit der Nutzer Geld einzahlen, abheben und transferieren können.
Ich verwende nodejs, hapijs, jsonwebtokens und bcrypt für meinen Server. Ich möchte zwei Token Authentifizierungsablauf (Oauth2) implementieren.
Dies ist die Art, wie ich es tue:
Benutzer bei dem Authentifizierungsserver, indem er einige Anmeldeinformationen (Benutzername und Passwort) zu geben.
Der Server überprüft die Anmeldeinformationen des Benutzers, sofern diese gültig sind, gewährt er dem Benutzer Zugriff und gibt ein Aktualisierungstoken und ein Zugriffstoken zurück.
Diese Token werden im lokalen Speicher des Browsers oder mobilen Geräts gespeichert.
Die
access token
:- als jsonwebtoken unterzeichnet.
- enthält ausgegebenes Datum, Ablaufdatum (5 min), Benutzerdaten (ID, Benutzername).
Die
refresh token
:- als jsonwebtoken und verschlüsselt mit bcrypt unterzeichnet.
- enthält eine eindeutige Kennung
- kann in der Datenbank ein Ablaufdatum
- wird gespeichert enthalten.
Solange die
access token
gültig ist, das heißt, es ist nicht abgelaufen ist, und enthält gültige Benutzerdaten, die Ressource-Server dient dem Benutzer die angeforderten Ressourcen.Wenn die
access token
nicht mehr gültig ist, fordert der Auth-Server das Client einrefresh token
bereitzustellen, um einen neuenaccess token
- den Server die
refresh token
vom Anwender erhält zu erteilen, entschlüsselt sie, es vergleicht zu dem in der Datenbank, überprüft, ob es widerrufen wurde, und überprüft seine eindeutige Kennung. Wenn dierefresh token
alle Tests besteht, gibt der Server einen neuenaccess token
an den Client aus. - Wenn die
refresh token
einen Test fehlschlägt, fordert der Server den Benutzer zur erneuten Authentifizierung.
- den Server die
Hinweise: Ich versuche, die Verwendung von Cookies zu vermeiden.
Fragen:
- Wenn der Benutzer in der Lage, eine
access token
zu stehlen, ich denke, es auch dierefresh token
stehlen kann. Also, wie kann ich dierefresh token
sicherer machen? - Ist meine Perspektive des Oauth2-Flusses korrekt?
- Was kann ich verbessern?
- Fehle ich etwas?
Welche Art von Kunden werden Ihren Service in Anspruch nehmen? – MvdD
@MvdD Ich würde öffentlich sagen. – ElPirru
Ich lese ein bisschen mehr über Client-Typen, und ich muss sagen, dass beide Clients meinen Dienst verbrauchen, glaube ich. Ich werde eine Web-App haben, und eine native App mit reactive native gemacht; Ich weiß nicht, ob es nativ ist oder nicht. Ich werde https verwenden. – ElPirru