Bei der Betrachtung von ASP.NET Identity (neue Implementierung der Mitgliedschaft in ASP.NET) bin ich bei der Implementierung meiner eigenen auf diese Schnittstelle gestoßen UserStore
:
//Microsoft.AspNet.Identity.Core.dll
namespace Microsoft.AspNet.Identity
{
public interface IUserSecurityStampStore<TUser> :
{
// Methods
Task<string> GetSecurityStampAsync(TUser user);
Task SetSecurityStampAsync(TUser user, string stamp);
}
}
IUserSecurityStampStore
wird standardmäßig implementiert, EntityFramework.UserStore<TUser>
wodurch die TUser.SecurityStamp
Eigenschaft im Wesentlichen abgerufen und festgelegt wird .
Nach einigem weiteren Graben scheint es, dass a ein SecurityStamp
ist Guid
, das an Schlüsselpunkten in neu generiert wird UserManager
(z. B. Ändern von Passwörtern).
Ich kann darüber hinaus nicht wirklich viel entziffern, da ich diesen Code in Reflector untersuche . Fast alle Symbol- und Async-Informationen wurden optimiert.
Auch Google hat nicht viel geholfen.
Fragen sind:
- Was ist eine
SecurityStamp
in ASP.NET Identity und wofür wird sie verwendet? - Tut das
SecurityStamp
eine Rolle, wenn Authentifizierungscookies erstellt werden? - Gibt es Sicherheitsauswirkungen oder Vorsichtsmaßnahmen, die dabei getroffen werden müssen? Senden Sie diesen Wert beispielsweise nicht nachgeschaltet an Clients?
Update (16.09.2014)
Quellcode hier verfügbar:
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Brian Chavez
quelle
quelle
Antworten:
Dies soll den aktuellen Schnappschuss der Anmeldeinformationen Ihres Benutzers darstellen. Wenn sich also nichts ändert, bleibt der Stempel gleich. Wenn jedoch das Passwort des Benutzers geändert oder ein Login entfernt wird (Verknüpfung Ihres Google / FB-Kontos aufheben), ändert sich der Stempel. Dies ist beispielsweise erforderlich, um Benutzer automatisch zu signieren oder alte Cookies abzulehnen. Dies ist eine Funktion, die in Version 2.0 enthalten ist.
Identität ist noch nicht Open Source, sie befindet sich derzeit noch in der Pipeline.
Bearbeiten: Aktualisiert auf 2.0.0. Der Hauptzweck von
SecurityStamp
ist es also, das Abmelden überall zu ermöglichen. Die Grundidee ist, dass es eine gute Idee ist, vorhandene Anmelde-Cookies automatisch ungültig zu machen, wenn etwas sicherheitsrelevantes am Benutzer geändert wird, z. B. ein Kennwort. Wenn Ihr Kennwort / Konto zuvor kompromittiert wurde, hat der Angreifer keinen Zugriff mehr.In 2.0.0 haben wir die folgende Konfiguration hinzugefügt, um die
OnValidateIdentity
Methode in dieCookieMiddleware
zu verknüpfenSecurityStamp
und Cookies abzulehnen, wenn sie geändert wurden. Außerdem werden die Ansprüche des Benutzers aus der Datenbank automatisch aktualisiert,refreshInterval
wenn der Stempel unverändert bleibt (dies kümmert sich beispielsweise um Rollenwechsel usw.).Wenn Ihre App dieses Verhalten explizit auslösen möchte, kann sie Folgendes aufrufen:
quelle
UseCookieAuthentication
ist mittlerweile veraltet . Ich habe es geschafft, es mit zu konfigurierenservices.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
.Die UseCookieAuthentication ist mittlerweile veraltet . Ich habe es geschafft, es mit zu konfigurieren
Von Antwort zu Antwort pro Anfrage verschoben .
quelle
Ich habe festgestellt, dass der SecurityStamp für die Token-Überprüfung erforderlich ist.
So repo: Setzen Sie SecurityStamp in der Datenbank auf null. Generieren Sie ein Token (funktioniert in Ordnung). Überprüfen Sie das Token (schlägt fehl.)
quelle