29

我已经阅读了这篇文章,虽然它解释了角色更改最终将如何在一段时间后传播到用户 cookie,但我仍然不明白我如何强制立即更改用户角色。

当我更改他作为管理员的角色时,我真的必须注销用户吗?如果是这样——怎么做?如果我使用AuthenticationManager.SignOut();,那么我会注销自己(管理员),而不是要更改角色的用户。

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

4

1 回答 1

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))
    }
});
于 2014-06-19T22:12:13.617 回答