208 votes

Quel est le IUserSecurityStampStore d'ASP.NET Identity <TUser> interface?

En regardant ASP.NET l'Identité (l'adhésion de nouveaux membres dans la mise en œuvre ASP.NET), je suis tombé sur cette interface lors de la mise en œuvre de mes propres 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 est mis en œuvre par la valeur par défaut EntityFramework.UserStore<TUser> qui vise essentiellement à obtenir et définir l' TUser.SecurityStamp de la propriété.

Après quelques plus de creuser, il apparaît qu'un SecurityStamp est Guid qui est nouvellement créées, à des points clés dans l' UserManager (par exemple, modification des mots de passe).

Je ne peux pas vraiment déchiffrer beaucoup au-delà de ce depuis que je suis à l'examen de ce code dans le Réflecteur. Presque tout le symbole et asynchrone de l'information a été optimisé.

Aussi, Google n'a pas été d'un grand secours.

Les Questions sont:

  • Qu'est ce qu'un SecurityStamp dans ASP.NET Identité et à quoi sert-il?
  • L' SecurityStamp jouent aucun rôle lorsque les cookies d'authentification sont créés?
  • Existe-il des ramifications de sécurité ou les précautions qui doivent être prises avec cette? Par exemple, ne pas envoyer cette valeur en aval pour les clients?

Mise à jour (9/16/2014)

Code Source disponible ici:

251voto

Hao Kung Points 13035

C'est donc surtout pour but de représenter le courant instantané de vos informations d'identification utilisateur. Donc, si rien ne change, le timbre reste la même. Mais si l'utilisateur le mot de passe est changé, ou un compte de connexion est supprimée (dissocier votre google/fb compte), le timbre va changer. Cela est nécessaire pour des choses comme automatiquement la signature d'utilisateurs ou de rejeter les anciens cookies lorsque cela se produit, ce qui est une caractéristique qui est à venir dans la version 2.0.

L'identité n'est pas open source mais, actuellement, dans la canalisation encore.

Edit: mise à Jour de la version 2.0.0. Donc, le but principal de l' SecurityStamp est de permettre signe de partout. L'idée de base est que chaque fois que quelque chose lié à la sécurité est modifié sur l'utilisateur, comme un mot de passe, c'est une bonne idée automatiquement l'invalidation de tout panneau existant dans les cookies, donc, si votre mot de passe/compte a été compromis, l'attaquant n'a plus accès.

Dans la version 2.0.0, nous avons ajouté la configuration suivante pour raccorder l' OnValidateIdentity méthode CookieMiddleware de regarder le SecurityStamp et de refuser les cookies quand il a changé. Il a également actualise automatiquement les revendications d'utilisateur de la base de données chaque refreshInterval si le timbre est inchangé (qui prend soin des choses comme le changement de rôles, etc)

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))
    }
});

Si votre application veut déclencher ce comportement explicitement, il peut appeler:

UserManager.UpdateSecurityStampAsync(userId);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X