ASP.net身份验证OWIN cookie在用户角色更改时会发生什么?

3

我刚开始使用OWIN和ASP.net身份认证。这是我登录用户的方式:

ClaimsIdentity identity = new ClaimsIdentity(
    new Claim[] {
        new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
        new Claim(ClaimTypes.Name, user.Username),
        new Claim(ClaimTypes.Email, user.Email),
        new Claim(ClaimTypes.GivenName, user.FirstName),
        new Claim(ClaimTypes.Surname, user.LastName),
        }, "ApplicationCookie");

foreach(Role role in user.Roles)
{
    identity.AddClaim(new Claim(ClaimTypes.Role, role.Name));
}

var owinContext = Request.GetOwinContext();
var authManager = owinContext.Authentication;
authManager.SignIn(new AuthenticationProperties() { IsPersistent = model.RememberMe }, identity);

这个功能可以正常运行,角色也被正确地连接。我的问题是:如果用户登录并具有一组角色,然后系统更新了他们的角色(可能是由系统管理员执行),如何使用户的身份验证cookie失效并重新填充?

1个回答

4
在您的Startup.cs文件中,您可以注册一个CookieAuthenticationProvider,在一定时间后使用户的cookie失效并重新生成一个新的cookie。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator
                .OnValidateIdentity<UserManager, ApplicationUser, int>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager)
        }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接