我已阅读this,虽然它解释了在一段时间间隔后角色更改最终会如何传播到用户Cookie,但我仍然不明白我是如何强制立即更改的到用户角色。
当我更改管理员角色时,是否真的必须签署用户?如果是这样 - 怎么样?如果我使用AuthenticationManager.SignOut();
,那么我签署自己(管理员),而不是用户,我想要更改其角色。
目前我使用await UserManager.UpdateSecurityStampAsync(user.Id);
生成新的安全标记,但它不起作用。当我以另一个用户身份登录时在另一个浏览器中刷新页面时,他的声明(包括安全标记)不会改变。
答案 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))
}
});