In den meisten JWT-Lernprogrammen (JSON Web Token) (z. B .: dies und dies ) sagen, dass Sie nach der Validierung das eingehende Token verwenden können, um Client-Informationen abzurufen, ohne sie vom Server zu validieren DB.
Meine Frage ist, wie wird dann eine ungültige Benutzersituation beibehalten? Was ich meine ist, sagen wir, ein Kunde hat gerade einen JWT-Token, der in einer Woche abläuft. Aber aus einem ganz bestimmten Grund sagen wir, dass wir entschieden haben, den Benutzer ungültig zu machen, und wollen nicht, dass der Benutzer auf unsere API zugreift. Dennoch hat dieser Benutzer ein gültiges Token und der Benutzer kann auf die API zugreifen.
Natürlich können wir, wenn wir für jede Anfrage eine Rundreise zur DB machen, prüfen, ob der Account gültig oder ungültig ist. Meine Frage ist, was ist der beste Weg, um diese Art von Situation für langlebige Tokens zu kümmern.
Vielen Dank im Voraus.
Es ist schwierig, JWT-basierte Zugriffstokens zu widerrufen, wenn nicht unmöglich.
Wie sollte ein Zugriffstoken dargestellt werden? Es gibt zwei Hauptwege.
Eine Auswahl zwischen diesen Möglichkeiten führt zu den folgenden Unterschieden, wie in der folgenden Tabelle beschrieben.
Siehe "7. Der Zugang Token" in " Voll Scratch Implementor von OAuth und OpenID Connect spricht über Entdeckungen " für Vor-und Nachteile der Möglichkeiten der Zugriffstoken Darstellung.
Wenn Ihr Access Token JWT-basiert, hat Ihr System auf (1) Speicher aufgehoben Zugriffstoken, bis sie verfallen. Ein weiterer Kompromiss besteht darin, (2) die Lebensdauer der Zugriffstoken kurz genug zu halten und sie nicht mehr zu entfernen .
persönlich nach Berücksichtigung, habe ich nicht wählen JWT als Zugriffstoken Darstellung, wenn ich einen Autorisierungsserver implementiert ( Authlete ), weil es ist schwierig / unmöglich, JWT-basierte Zugriffstokens zu widerrufen und zu aktualisieren, sobald sie ausgegeben wurden.
Es ist nicht klar, welchen OAuth-Flow Sie aus Ihrer Frage verwenden oder ob Sie auf OpenID Connect und nicht auf Oauth verweisen.
Ziehen Sie die Verwendung von Aktualisierungstoken in Betracht und verwenden Sie ein viel kürzeres Ablaufdatum für Ihr Zugriffstoken - z. 30 Minuten.
In diesem Szenario muss der Benutzer ( resource owner
) nicht weiter authentifizieren und Ihre API ( Resource Server
) muss nicht überprüfen, ob der Benutzer bei jeder einzelnen Anfrage noch gültig ist.
Sobald das Zugriffstoken abläuft, sollte Ihr client
(Anwendung, die Ihre API aufruft) Ihre Datenbank ( Authorisation Server
) kontaktieren und ihr Aktualisierungstoken für ein neues Zugriffstoken austauschen - und normalerweise ein neues Aktualisierungstoken -, vorausgesetzt der Benutzer ist immer noch ein gültiger Benutzer in Ihrer Datenbank und der Benutzer hat den Zugriff für die Client-Anwendung auf seine Daten in der API nicht widerrufen.
Sie können den Token-Widerruf auch wie in einer anderen Antwort vorgeschlagen verwenden, wenn Ihr Autorisierungsserver dies zulässt, aber ich würde versuchen, Tokens und kurzlebige Zugriffstoken zu aktualisieren, da dies viel einfacher zu implementieren ist und Ihre API nicht mit Benutzerauthentifizierung / -autorisierung belastet Bedenken - Dieser Job wird am besten von einem Auth Server ausgeführt.
Das ist das Hauptproblem, wenn Sie JWT verwenden. Der beste Ansatz ist in diesem Fall die Erstellung einer Blacklist auf Ihrem Gateway. Es ist nicht die beste Lösung für die Sicherheit Sicht, aber das ist nur eine gute Lösung, wenn Sie JWT verwenden.
Tags und Links security oauth spring-security oauth-2.0 jwt