C# 如何向使用ASP.NET Identity 2.0.1的用户强制传播角色更改?

C# 如何向使用ASP.NET Identity 2.0.1的用户强制传播角色更改?,c#,asp.net,asp.net-mvc-5,asp.net-identity-2,C#,Asp.net,Asp.net Mvc 5,Asp.net Identity 2,我已经读过了,虽然它解释了角色更改将如何在一段时间间隔后最终传播到用户cookie,但我仍然不理解如何强制立即更改用户角色 当我更改用户作为管理员的角色时,我真的必须注销该用户吗?如果是的话-如何?如果我使用AuthenticationManager.SignOut()然后我签下我自己(管理员),而不是我想更改其角色的用户 目前我使用await UserManager.UpdateSecurityStampAsync(user.Id)生成新的安全戳,但它不起作用。当我以另一个用户身份登录时,在另

我已经读过了,虽然它解释了角色更改将如何在一段时间间隔后最终传播到用户cookie,但我仍然不理解如何强制立即更改用户角色

当我更改用户作为管理员的角色时,我真的必须注销该用户吗?如果是的话-如何?如果我使用
AuthenticationManager.SignOut()然后我签下我自己(管理员),而不是我想更改其角色的用户


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

如果要启用即时吊销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))
    }
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”),
Provider=新CookieAuthenticationProvider
{
//允许应用程序在用户登录时验证安全戳。
//这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(
validateInterval:TimeSpan.FromSeconds(0),
regenerateIdentity:(管理器,用户)=>user.GenerateUserIdentityAsync(管理器))
}
});

谢谢你,郝。这就是我最初的想法,它确实解决了这个问题,所以我接受这个答案。但是没有办法使特定用户的cookie无效吗?我的意思是,要解决这样一个看似很小的任务,这是一个非常重要的权衡停止工作,只有当我包含
等待UserManager.UpdateSecurityStampAsync(userId)时,用户才会注销。对我来说似乎不太正确。啊,是的,所以这里有一点奇怪的交互,因为注销告诉应用程序清除cookie,但regenerateIdentity告诉OWIN设置一个新的登录cookie。我相信这是Owin中的一个错误,将在将来的版本中修复(注销应始终成功)。这与我遇到的问题相同,用户无法以AuthenticationManager身份注销。SignOut()不会以零验证间隔注销。@Haokong我现在有这个问题-请参阅-您知道这里的解决方案吗?