什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?
看看ASP.NET Identity(ASP.NET中的新成员实现),在实现我自己的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
由默认的EntityFramework.UserStore<TUser>
,它实质上获取并设置TUser.SecurityStamp
属性。
经过一些挖掘之后,看起来SecurityStamp
是在UserManager
关键点(例如,更改密码)新生成的Guid
。
因为我正在检查Reflector中的这段代码,所以除了这个之外,我无法真正解读。 几乎所有的符号和asynchronous信息都被优化了。
另外,谷歌并没有太多的帮助。
问题是:
- 什么是ASP.NET标识中的
SecurityStamp
,它的用途是什么? -
SecurityStamp
在创build身份validationCookie时扮演什么angular色? - 是否有任何安全后果或预防措施,需要采取与此? 例如,不要将此值下游发送给客户端?
更新(9/16/2014)
源代码在这里:
- https://github.com/aspnet/Identity/
- https://github.com/aspnet/Security/
这是为了表示用户凭据的当前快照。 所以如果没有任何变化,邮票将保持不变。 但是,如果用户的密码被改变了,或者login被删除(取消你的google / fb账户),邮票将会改变。 这是自动签署用户/拒绝旧的cookie发生这种情况时所需要的,这是2.0版本中的一项function。
身份还不是开源的,目前还在stream水线上。
编辑:更新为2.0.0。 所以SecurityStamp
的主要目的是使每个地方都可以注销。 基本的想法是,只要用户的某个安全相关信息被修改,比如密码,最好自动将任何已经存在的cookie标识设为无效,因此如果您的密码/帐户之前已被破解,攻击者将无法再访问。
在2.0.0中,我们添加了以下configuration来挂接CookieMiddleware
的OnValidateIdentity
方法,以查看SecurityStamp
并在发生更改时拒绝Cookie。 如果邮票不变,它也会自动刷新数据库中的每个refreshInterval
的用户声明(其中包括更改angular色等)
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)) } });
如果您的应用程序想要明确触发此行为,它可以调用:
UserManager.UpdateSecurityStampAsync(userId);
我观察到SecurityStamp是令牌validation所必需的。
要回购:在数据库中将SecurityStamp设置为null生成令牌(正常工作)validation令牌(失败)