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



查看 ASP.NET 身份(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 中检查这段代码。几乎所有的符号和异步信息都已优化。

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

问题是:

    什么是
  • ASP.NET 身份中的SecurityStamp,它的用途是什么?
  • 创建身份验证 Cookie 时,SecurityStamp是否发挥任何作用?
  • 是否需要采取任何安全后果或预防措施?例如,不将此值发送到下游客户端?

更新 (9/16/2014)

此处提供的源代码:

  • https://github.com/aspnet/Identity/
  • https://github.com/aspnet/Security/

这表示用户凭据的当前快照。 因此,如果没有任何变化,邮票将保持不变。 但是,如果用户的密码被更改,或者登录名被删除(取消链接您的谷歌/fb 帐户),则图章将更改。 发生这种情况时自动签署用户/拒绝旧 cookie 等功能需要这样做,这是 2.0 中的一项功能。

Identity还不是开源的,它目前仍在筹备中。

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

2.0.0 中,我们添加了以下配置以在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);

UseCookieAuthentication现在已经不推荐使用。我设法使用

services.Configure<SecurityStampValidatorOptions>(o => 
    o.ValidationInterval = TimeSpan.FromSeconds(10));

从回复移动到每个请求的答案。

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

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

相关内容

  • 没有找到相关文章

最新更新