it-swarm.com.de

Was ist die IUserSecurityStampStore <TUser> -Schnittstelle von ASP.NET Identity?

Beim Betrachten von ASP.NET Identity (Implementierung einer neuen Mitgliedschaft in ASP.NET) stieß ich bei der Implementierung meines eigenen UserStore auf diese Schnittstelle:

//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 ist standardmäßig implementiert EntityFramework.UserStore<TUser> was im Wesentlichen das TUser.SecurityStamp Eigentum.

Nach einigen weiteren Grabungen scheint es, dass ein SecurityStamp ein Guid ist, das an Schlüsselpunkten im UserManager neu generiert wird (zum Beispiel durch Ändern von Passwörtern).

Ich kann nicht wirklich viel darüber hinaus 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 ein SecurityStamp in ASP.NET Identity und wofür wird es verwendet?
  • Spielt das SecurityStamp eine Rolle, wenn Authentifizierungscookies erstellt werden?
  • Gibt es irgendwelche Sicherheitsvorkehrungen, die getroffen werden müssen? Senden Sie diesen Wert beispielsweise nicht nachgeschaltet an Clients?

Update (16.09.2014)

Quellcode hier verfügbar:

163
Brian Chavez

Dies soll den aktuellen Schnappschuss der Anmeldeinformationen Ihres Benutzers darstellen. Wenn sich also nichts ändert, bleibt der Stempel unverändert. Wenn jedoch das Passwort des Nutzers 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, es ist noch in der Pipeline.

Bearbeiten: Aktualisiert für 2.0.0. Der Hauptzweck von SecurityStamp besteht darin, das Abmelden überall zu ermöglichen. Die Grundidee ist, dass bei jeder Änderung von Sicherheitsaspekten am Benutzer, wie z. B. einem Passwort, automatisch alle vorhandenen Anmelde-Cookies ungültig gemacht werden. Wenn also Ihr Passwort/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 die CookieMiddleware einzuhängen, um die SecurityStamp zu betrachten und Cookies abzulehnen, wenn sie geändert wurden. Außerdem werden die Ansprüche des Benutzers automatisch alle refreshInterval aus der Datenbank aktualisiert, wenn der Stempel unverändert ist (dies erledigt Dinge wie Rollenwechsel usw.).

app.UseCookieAuthentication(new CookieAuthenticationOptions {
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/Account/Login"),
    Provider = new CookieAuthenticationProvider {
        // Enables the application to validate the security stamp when the user logs in.
        // This is a security feature which is used when you change a password or add an external login to your account.  
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

Wenn Ihre App dieses Verhalten explizit auslösen möchte, kann sie Folgendes aufrufen:

UserManager.UpdateSecurityStampAsync(userId);
208
Hao Kung

Die UseCookieAuthentication ist veraltet . Ich habe es geschafft, es mit zu konfigurieren

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));

Verschoben von Antwort zu Antwort per Anfrage .

4
riezebosch

Ich habe festgestellt, dass der SecurityStamp für die Token-Überprüfung erforderlich ist.

So wiederholen Sie den Vorgang: Setzen Sie SecurityStamp in den Datenbanken auf null. Generieren Sie ein Token (funktioniert in Ordnung). Überprüfen Sie das Token (schlägt fehl).

3
KierenH