wake-up-neo.net

Ablauf des JSON-Web Token

In den meisten JWT (JSON Web Token) -Tutorials (z. B. this und this ) heißt es, dass Sie nach der Validierung das eingehende Token verwenden können, um Clientinformationen abzurufen, ohne diese aus der Datenbank zu bestätigen.

Meine Frage ist, wie ungültig die Benutzersituation ist. Ich meine, sagen wir, ein Kunde hat gerade ein JWT-Token erhalten, das in einer Woche abläuft. Aber aus ganz bestimmten Gründen haben wir uns entschieden, den Benutzer für ungültig zu erklären, und möchten nicht, dass der Benutzer auf unsere API zugreift. Dieser Benutzer verfügt jedoch über ein gültiges Token, und der Benutzer kann auf die API zugreifen. 

Wenn wir für jede Anfrage eine Rundreise zur DB unternehmen, können wir natürlich überprüfen, ob das Konto gültig oder ungültig ist. Meine Frage ist, wie man diese Art von Situation am besten für langlebige Spielmarken bewältigen kann.

Danke im Voraus.

15
Jahid Shohel

Es ist schwierig, JWT-basierte Zugriffstoken zu widerrufen, wenn dies nicht unmöglich ist.

Wie soll ein Access-Token dargestellt werden? Es gibt zwei Hauptwege.

  1. Als sinnlose zufällige Zeichenfolge. Mit einem Zugriffstoken verknüpfte Informationen werden in einer Datenbanktabelle hinter einem Autorisierungsserver gespeichert.
  2. Als eigenständige Zeichenfolge, die auf die Codierung der Zugriffstokeninformationen durch base64url oder ähnliches zurückzuführen ist.

Eine Wahl zwischen diesen Möglichkeiten führt zu den in der folgenden Tabelle beschriebenen Unterschieden.

 enter image description here

Siehe "7. Access Token" in " Full-Scratch-Implementierer von OAuth und OpenID Connect spricht über Ergebnisse " für Vor-und Nachteile der Darstellung der Zugriffstoken.

Wenn Ihre Zugriffstoken JWT-basiert sind, muss Ihr System (1) sich an gesperrte Zugriffstoken erinnern, bis sie ablaufen. Ein weiterer Kompromiss besteht darin, (2) die Lebensdauer der Zugriffstoken kurz genug zu machen und den Widerruf aufzugeben.

Persönlich habe ich nach Abwägung JWT nicht als Zugriffstokendarstellung ausgewählt, als ich einen Autorisierungsserver ( Authlete ) implementierte, da es schwierig/unmöglich ist, JWT-basierte Zugriffstoken zu widerrufen und zu aktualisieren, sobald sie ausgestellt sind.

5

Es ist nicht klar, welchen OAuth-Fluss Sie von Ihrer Frage verwenden oder ob Sie sich auf OpenID Connect anstatt auf Oauth beziehen. 

Erwägen Sie die Verwendung von Auffrischungs-Token und legen Sie einen viel kürzeren Ablauf für Ihr Zugriffstoken fest, z. 30 Minuten. 

In diesem Szenario muss sich der Benutzer (resource owner) nicht weiter authentifizieren, und Ihre API (Resource Server) muss nicht überprüfen, ob der Benutzer bei jeder einzelnen Anforderung noch gültig ist.

Nach Ablauf des Zugriffstokens sollte Ihre client (Anwendung, die Ihre API aufruft) Ihre DB (Authorisation Server) kontaktieren und ihr Aktualisierungstoken durch ein neues Zugriffstoken - und normalerweise ein neues Aktualisierungstoken - austauschen, sofern der Benutzer noch ein gültiger Benutzer in Ihrer Datenbank ist und der Benutzer hat der Client-Anwendung den Zugriff auf seine Daten in der API nicht widerrufen. 

Sie können auch den Widerruf des Tokens wie in einer anderen Antwort vorgeschlagen verwenden, wenn Ihr Autorisierungsserver dies zulässt. Ich würde jedoch versuchen, Token und kurzlebige Zugriffstoken zu aktualisieren, da dies viel einfacher zu implementieren ist und Ihre API nicht mit Problemen hinsichtlich der Benutzerauthentifizierung/Autorisierung belastet Der Job wird am besten von einem Auth-Server erledigt.

0
iandayman

RFC 7009 gibt OAuth 2.0-Token-Widerruf an. Grundsätzlich haben Sie einen Endpunkt, an dem Sie die access_tokens widerrufen können.

0
moritzg

Das ist das Hauptproblem, wenn Sie JWT verwenden. Im Grunde ist der beste Ansatz in diesem Fall das Erstellen einer Blacklist auf Ihrem Gateway. Aus Sicherheitsgründen ist dies nicht die beste Lösung, aber dies ist nur bei Verwendung von JWT eine gute Lösung. 

0