En regardant ASP.NET Identity (nouvelle implémentation d'appartenance dans ASP.NET), je suis tombé sur cette interface lors de l'implémentation de la mienne 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 implémenté par défaut EntityFramework.UserStore<TUser>
qui obtient et définit essentiellement la TUser.SecurityStamp
propriété.
Après quelques recherches supplémentaires, il semble que a SecurityStamp
est un Guid
nouvellement généré à des points clés dans le UserManager
(par exemple, la modification des mots de passe).
Je ne peux pas vraiment déchiffrer beaucoup plus que cela puisque j'examine ce code dans Reflector . Presque tous les symboles et informations asynchrones ont été optimisés.
De plus, Google n'a pas été d'une grande aide.
Les questions sont:
- Qu'est-ce qu'une
SecurityStamp
identité ASP.NET et à quoi sert-elle? - Le
SecurityStamp
joue- t-il un rôle lors de la création de cookies d'authentification? - Y a-t-il des ramifications de sécurité ou des précautions à prendre avec cela? Par exemple, n'envoyez pas cette valeur en aval aux clients?
Mise à jour (16/09/2014)
Code source disponible ici:
la source
Réponses:
Ceci est destiné à représenter l'instantané actuel des informations d'identification de votre utilisateur. Donc, si rien ne change, le tampon restera le même. Mais si le mot de passe de l'utilisateur est modifié ou si une connexion est supprimée (dissociez votre compte google / fb), le tampon changera. Cela est nécessaire pour des choses comme la signature automatique des utilisateurs / le rejet des anciens cookies lorsque cela se produit, qui est une fonctionnalité qui arrive dans la version 2.0.
L'identité n'est pas encore open source, elle est toujours en cours d'élaboration.
Edit: mis à jour pour 2.0.0. L'objectif principal du
SecurityStamp
est donc d'activer la déconnexion partout. L'idée de base est que chaque fois qu'un élément lié à la sécurité est modifié sur l'utilisateur, comme un mot de passe, c'est une bonne idée d'invalider automatiquement tout cookie de connexion existant, donc si votre mot de passe / compte a été précédemment compromis, l'attaquant n'y a plus accès.Dans la version 2.0.0, nous avons ajouté la configuration suivante pour accrocher la
OnValidateIdentity
méthode dans leCookieMiddleware
pour examinerSecurityStamp
et rejeter les cookies lorsqu'ils ont changé. Il actualise également automatiquement les revendications de l'utilisateur à partir de la base de données chaque foisrefreshInterval
que le tampon est inchangé (ce qui prend en charge des choses comme le changement de rôle, etc.)Si votre application souhaite déclencher ce comportement explicitement, elle peut appeler:
la source
UseCookieAuthentication
est désormais obsolète . J'ai réussi à le configurer en utilisantservices.Configure<SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));
.UseCookieAuthentication est désormais obsolète . J'ai réussi à le configurer en utilisant
Déplacé de réponse à réponse par demande .
la source
J'ai observé que SecurityStamp était requis pour la vérification des jetons.
Pour repo: définissez SecurityStamp sur null dans la base de données Générer un jeton (fonctionne bien) Vérifier le jeton (échoue)
la source