Ich bin dabei, eine Web-API zu implementieren, die den asp.net-Kern verwendet, der JWT verwendet. Ich verwende keine Drittanbieterlösung wie IdentityServer4, wie ich versuche zu lernen.
Ich habe die JWT-Konfiguration zum Laufen gebracht, aber ich bin darüber verärgert, wie man Refresh-Token für den Ablauf der JWTs implementiert.
Im Folgenden finden Sie einen Beispielcode in meiner Configure-Methode in startup.cs.
%Vor%Unten ist die Controller-Methode zum Generieren der JWT. Ich habe den Ablauf auf 30 Sekunden für Testzwecke eingestellt.
%Vor%Wäre sehr dankbar für eine Anleitung.
Zuerst müssen Sie ein Refresh-Token generieren und es irgendwo speichern. Dies liegt daran, dass Sie es bei Bedarf ungültig machen möchten. Wenn Sie dem gleichen Muster folgen wie ein Zugriffstoken, bei dem alle Daten im Token enthalten sind, kann ein Token, das in die falschen Hände gelangt, dazu verwendet werden, neue Zugriffstoken für die Lebensdauer des Aktualisierungstokens zu generieren kann eine wirklich lange Zeit sein.
Also was zum Teufel müssen Sie fortbestehen? Sie brauchen eine eindeutige Kennung für einige Arten, die nicht leicht zu erraten ist, eine GUID wird gut funktionieren. Sie benötigen außerdem die Daten, um ein neues Zugriffstoken, höchstwahrscheinlich einen Benutzernamen, ausgeben zu können. Mit einem Benutzernamen können Sie dann den VerifyHashedPassword (...) - Teil überspringen, aber für den Rest folgen Sie einfach der gleichen Logik.
Um ein Aktualisierungstoken zu erhalten, verwenden Sie normalerweise den Bereich "offline_access", den Sie in Ihrem Modell (CredentialViewModel) angeben, wenn Sie eine Tokenanfrage stellen. Anders als bei einer normalen Zugriffstokenanforderung müssen Sie jetzt nicht Ihren Benutzernamen und Ihr Kennwort angeben, sondern das Aktualisierungstoken. Wenn Sie eine Anforderung mit einem Aktualisierungstoken erhalten, suchen Sie den permanenten Bezeichner und geben ein Token für den gefundenen Benutzer aus.
Das Folgende ist Pseudocode für den glücklichen Pfad:
%Vor%Tags und Links asp.net-web-api c# asp.net