asp.net - ASP.NET Identity 的 IUserSecurityStampStore<TUser> 接口(interface)是什么?

标签 asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

查看 ASP.NET Identity(ASP.NET 中的新成员身份实现),我在实现自己的 UserStore 时遇到了这个接口(interface)。 :

//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属性。

经过进一步挖掘,似乎 SecurityStampGuid这是在UserManager中的关键点处新生成的(例如,更改密码)。

由于我正在 Reflector 中检查此代码,因此我无法真正破译除此之外的内容。几乎所有符号和异步信息都已被优化。

此外,Google 也没有提供太多帮助。

问题是:

  • 什么是SecurityStamp ASP.NET Identity 中的内容以及它的用途是什么?
  • SecurityStamp 是吗?创建身份验证 cookie 时发挥什么作用?
  • 是否有任何安全后果或需要采取预防措施?例如,不要将此值向下游发送给客户端?
<小时/>

更新(2014 年 9 月 16 日)

源代码在这里:

最佳答案

这意味着您的用户凭据的当前快照。因此,如果没有任何变化,邮票将保持不变。但是,如果用户的密码被更改,或者登录信息被删除(取消链接您的 google/fb 帐户),则标记将会更改。这是在发生这种情况时自动签名用户/拒绝旧 cookie 之类的事情所需要的,这是 2.0 中提供的功能。

Identity 尚未开源,目前仍在开发中。

编辑:针对 2.0.0 进行了更新。因此,SecurityStamp 的主要目的是在任何地方启用注销。基本思想是,每当用户更改与安全相关的内容(例如密码)时,最好自动使任何现有的登录 cookie 失效,因此,如果您的密码/帐户之前已被泄露,攻击者将不再具有访问权限。

在 2.0.0 中,我们添加了以下配置来 Hook CookieMiddleware 中的 OnValidateIdentity 方法,以查看 SecurityStamp 并在出现时拒绝 cookie它已经改变了。如果标记未更改,它还会在每个 refreshInterval 时自动刷新数据库中的用户声明(这会处理更改角色等问题)

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

关于asp.net - ASP.NET Identity 的 IUserSecurityStampStore<TUser> 接口(interface)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19487322/

相关文章:

javascript - 使用 TextBox 将数据(列表)从 View 传递到 Controller

c# - Html.BeginForm 内的 System.StackOverflowException

jquery - 我是否总是需要显式捆绑 jQuery UI 的所有样式?

asp.net - 蓝屏死机只能在IE下运行

c# - EF-如何使用 Linq to Entities 执行 'Not In'

javascript - 在网络浏览器中禁用 Javascript 应禁用服务器验证控件

asp.net-mvc - OWIN/MVC5 上的 LinkedIn 身份验证

asp.net - 在 ASP.Net 网站中包含带有自定义控件的 Javascript

asp.net-mvc - 使用 Ajax.ActionLink() 进行优雅降级,无法使其工作,请检查我的语法。 (MVC3)

asp.net-mvc - 自定义模型 Binder MVC 的参数