it-swarm.com.de

Verwenden der AspNetUserTokens-Tabelle zum Speichern des Aktualisierungstokens in ASP.NET Core Web Api

Ich arbeite mit der ASP.NET Core Web API-Anwendung. Ich versuche, die auf JWT-Token basierende Authentifizierung über ASP.NET Identity (integriert in Datenbanktabellen) zu implementieren.

Ich habe alle Szenarien wie Benutzer registrieren, anmelden usw. implementiert, aber jetzt versuche ich, den Ablauf des Aktualisierungstokens zu implementieren (wobei das Zugriffstoken abgelaufen ist und der Client das Zugriffstoken mithilfe des Aktualisierungstokens ersetzen muss). Ich habe gesehen, dass Leute eine neue Tabelle (refreshToken) erstellen, um das Aktualisierungstoken zu speichern, damit es mit dem Zugriffstoken validiert werden kann und neue Zugriffs- und Aktualisierungstoken generiert werden

https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/

https://www.c-sharpcorner.com/article/handle-refresh-token-using-asp-net-core-2-0-and-json-web-token/

Ich habe eine neue Tabelle (refreshToken) erstellt, um das Aktualisierungstoken zu speichern und zu überprüfen, ob es Zugriffstoken generiert. Es funktioniert einwandfrei, aber ich wollte sehen, ob ich die vorhandene AspNetUserTokens-Tabelle verwenden kann, um dasselbe Szenario zu behandeln. Ich verstehe, dass die AspNetUserTokens-Tabelle zur Bestätigung von E-Mails, zum Vergessen des Passworts usw. verwendet wird.

Meine Frage lautet: Wenn jemand AspNetUserTokens zum Speichern von Auffrischungssignalen verwendet hat, teilen Sie die Idee mit, da die usermanager-Klasse kein direktes Token-Modell (AspNetUserTokens) verfügbar macht und nicht sicher ist, ob Ich benutze IdentityDbContext, was sind die Pron und Contras? Ich habe IdentityDbContext implementiert, aber ich sehe keine eingebaute Klasse in Microsoft.AspNetCore.Identity, um Token in AspNetUserTokens zu speichern

Wäre für eine Anleitung sehr dankbar.

Vielen Dank

13
Ankit Patel

Ich beantworte Ihre Frage direkt und schlage eine Alternative vor. Sie können Token mit der AspNetUserTokens-Tabelle entfernen, festlegen, abrufen und validieren. Sie können jedoch wahrscheinlich die Datenbank überspringen und ich werde das unten beschreiben.

Die folgenden Methoden des UserManagers werden generiert und gespeichert:

await _userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
await _userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);

Die folgenden Methoden des UserManagers werden abgerufen und validiert:

var refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var isValid = await _userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken );

Sie müssen einen solchen Anbieter mit dem IdentityBuilder in Startup einrichten.

identity.AddTokenProvider("MyApp", typeof(DataProtectorTokenProvider<User>)

Als Alternative zum Speichern dieser Token in der Datenbank können Sie Folgendes verwenden, um alle Token nach Bedarf zu ungültig machen. Sie können dies als Teil der Abmeldung tun.

_userManager.UpdateSecurityStampAsync(user);
12
Chris Schoon