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

Int*_*bil 26 c# asp.net asp.net-mvc-5 asp.net-identity-2

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

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

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

Hao*_*ung 19

如果要立即撤消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))
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,所以有一些奇怪的交互,因为SignOut告诉应用程序清除cookie,但regenerateIdentity告诉OWIN设置一个新的cookie登录.我相信这是Owin中的一个错误,将在未来版本中修复(SignOut应该总是赢) (4认同)
  • 谢谢你,郝.这就是我最初的想法,它确实解决了这个问题,所以我接受这个作为答案.但是没有办法让特定用户的cookie无效吗?我的意思是,解决这样一个看似很小的任务是一个相当严重的权衡. (2认同)