什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

Bri*_*vez 168 asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

看看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);
    }
}
Run Code Online (Sandbox Code Playgroud)

IUserSecurityStampStore由默认实现EntityFramework.UserStore<TUser>,实质上获取和设置TUser.SecurityStamp属性.

经过一些挖掘之后,似乎a SecurityStampGuid在关键点新生成的UserManager(例如,更改密码).

因为我在Reflector中检查这段代码,所以我无法真正破译.几乎所有的符号和异步信息都已经过优化.

此外,谷歌也没有太多帮助.

问题是:

  • 什么是SecurityStampASP.NET标识,它用于什么?
  • SecurityStamp创建身份验证cookie时,是否扮演任何角色?
  • 是否有任何需要采取的安全措施或预防措施?例如,不要将此值向下游发送给客户端?

更新(2014年9月16日)

源代码在这里:

Hao*_*ung 210

这是为了表示用户凭据的当前快照.因此,如果没有任何变化,邮票将保持不变.但是,如果更改了用户的密码,或者删除了登录信息(取消链接您的google/fb帐户),邮票将会更改.这需要自动签名用户/拒绝旧cookie,这是一个2.0版本的功能.

身份尚未开源,目前仍在进行中.

编辑:已更新为2.0.0. 所以它的主要目的是在SecurityStamp任何地方都能签名.基本的想法是,每当用户更改与安全相关的内容(如密码)时,最好自动使任何现有的cookie登录失效,因此如果您的密码/帐户先前已被盗用,则攻击者将无法再访问.

在2.0.0中,我们添加了以下配置来挂钩该OnValidateIdentity方法,CookieMiddleware以便在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))
    }
});
Run Code Online (Sandbox Code Playgroud)

如果您的应用想要明确触发此行为,则可以调用:

UserManager.UpdateSecurityStampAsync(userId);
Run Code Online (Sandbox Code Playgroud)

  • 不,OAuthBearerTokens目前不受影响. (7认同)
  • UserManager.UpdateSecurityStampAsync(userId)是否适用于UseOAuthBearerTokens? (2认同)
  • 到目前为止,"UseCookieAuthentication"已被[已弃用](https://go.microsoft.com/fwlink/?linkid=845470).我设法使用`services.Configure <SecurityStampValidatorOptions>(o => o.ValidationInterval = TimeSpan.FromSeconds(10));`来配置它. (2认同)

rie*_*sch 15

现在不推荐使用UseCookieAuthentication 。我设法配置它使用

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));
Run Code Online (Sandbox Code Playgroud)

请求从回复移动到回复。

  • 如果我使用的是 ASP.NET(不是 Core),这是否有效?我很迷惑。如果我转到 [Asp Identity](https://github.com/aspnet/Identity) 存储库,它会说它用于 Asp.NET Core。 (3认同)

小智 5

我观察到令牌验证需要使用SecurityStamp。

要回购:在databsae中将SecurityStamp设置为null生成令牌(正常工作)验证令牌(失败)