Wie entkräften OAuth-token, wenn das Passwort geändert wird?
Verwenden wir ASP.NET Identität in einer Web-Api-Projekt mit SimpleAuthorizationServerProvider
wir die Verwendung von OAuth-Token zur Autorisierung jede Anforderung kommt vom Klienten. (Token haben und ablaufen der Zeitspanne, die wir nicht benutzen refresh Token.)
Wenn Benutzer Ihr Kennwort ändern, ich möchte zu entkräften, die Token, die Sie haben können, möglicherweise auch auf anderen Geräten. Gibt es eine Möglichkeit, explizit zu machen? Ich experimentierte und sah, dass die vorhandenen Token funktionieren ohne jedes problem nach einer Passwort-änderung, die verhindert werden sollte.
Dachte ich über das setzen der Passwort-hash, oder einen Teil der hash in der OAuth-token als eine Forderung, und die überprüfung, dass in der OnAuthorization
Methode der abgeleiteten AuthorizeAttribute filter.
Dies wäre die richtige Art, das problem zu lösen?
InformationsquelleAutor der Frage Mark Vincze | 2014-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht empfehlen, den hash des Passwortes als Anspruch, und ich glaube, es gibt keinen direkten Weg, um token ungültig, wenn das Passwort geändert wird.
Aber, wenn Sie sind Ok mit schlagen der DB mit jeder Anfrage sendet der client-app auf eine geschützte API-Endpunkt, dann müssen Sie zum speichern von Token Identifier (Guid vielleicht) für jedes token gewährt Besitzer der Ressource angefordert. Dann ordnen Sie die token-Id als benutzerdefinierte Anspruch für dieses token, nach dieser müssen Sie diese Tabelle bei jeder Anfrage nach dem token-id und den Benutzernamen für die Besitzer der Ressource.
Sobald das Passwort geändert wird, löschen Sie dieses token identifier-Eintrag für diese Ressource owner (user) und das nächste mal wird das token vom client gesendet wird es abgelehnt bekommen, da der Datensatz für dieses token identifier und Ressource Besitzer gelöscht worden.
InformationsquelleAutor der Antwort Taiseer Joudeh
Habe ich basiert meine Herangehensweise auf Taiseer Vorschlag. Der Kern der Lösung ist die folgende. Jedes mal, wenn ein Benutzer sein Passwort ändert (und wenn registriert), wird eine neue GUID generiert und in der Datenbank gespeichert, in der User-Tabelle. Ich nenne diese GUID der Passwort Stempelund speichern Sie es in eine Eigenschaft namens
LatestPasswordStamp
.Dieser Stempel hat, werden an den client gesendet als Teil des token als eine Behauptung. Erreicht werden kann dies mit dem folgenden code in der
GrantResourceOwnerCredentials
Methode derOAuthAuthorizationServerProvider
-Umsetzung.Dieser Stempel wird vom client gesendet, um den server bei jedem request, und es ist verifiziert, dass der Stempel wurde nicht in der Datenbank geändert. Wenn es war, es bedeutet, dass die Benutzer Ihr Kennwort geändert haben, möglicherweise von einem anderen Gerät. Die überprüfung erfolgt in unserem custom authorization-filter wie dieser.
Diese Weise bekommt der Kunde eine Fehlermeldung zu Ihrer Berechtigung, wenn versucht wird, autorisieren sich mit einem token, der ausgestellt wurde, bevor das Passwort geändert wurde.
InformationsquelleAutor der Antwort Mark Vincze