如何使用ASP.NET Identity 2.0.1强制将角色更改传播给用户?

时间:2014-06-18 13:10:33

标签: c# asp.net asp.net-mvc-5 asp.net-identity-2

我已阅读this,虽然它解释了在一段时间间隔后角色更改最终会如何传播到用户Cookie,但我仍然不明白我是如何强制立即更改的到用户角色。

当我更改管理员角色时,是否真的必须签署用户?如果是这样 - 怎么样?如果我使用AuthenticationManager.SignOut();,那么我签署自己(管理员),而不是用户,我想要更改其角色。

目前我使用await UserManager.UpdateSecurityStampAsync(user.Id);生成新的安全标记,但它不起作用。当我以另一个用户身份登录时在另一个浏览器中刷新页面时,他的声明(包括安全标记)不会改变。

1 个答案:

答案 0 :(得分:18)

如果要立即撤消cookie,则每个请求都必须访问数据库以验证cookie。因此,延迟与数据库负载之间的权衡。但是您始终可以将validationInterval设置为0。

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.FromSeconds(0),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});