我如何在 cookie 上保留 ASP.NET 身份声明直到注销?
How do I persist a ASP.NET Identity Claim on a cookie until logout?
我正在制作一个使用 Identity 的 ASP.NET MVC 5 应用程序。身份验证的一部分包括将声明存储在 cookie 中,而不将其保存到数据库中,因为该声明只能持续到用户注销为止。此声明在注销后添加到用户身份,并且用户可以在登录时随时更改声明的值。为此,我使用以下代码:
var AuthenticationManager = HttpContext.GetOwinContext().Authentication;
var Identity = User.Identity as ClaimsIdentity;
if (Identity.HasClaim(c => c.Type == "custom"))
{
Identity.RemoveClaim(Identity.FindFirst("custom"));
}
Identity.AddClaim(new Claim("custom", "value", ClaimValueTypes.Integer32));
AuthenticationManager.AuthenticationResponseGrant =
new AuthenticationResponseGrant(new ClaimsPrincipal(Identity), new AuthenticationProperties { IsPersistent = true });
这在一段时间内工作正常...但是在用户登录后大约十分钟,索赔就消失了!我怎样才能使声明在注销之前一直存在?
您的问题是 Startup.Auth.cs
中配置的 SecurityStampValidator
正在擦除存储在 cookie 中的自定义声明。
您需要查看 ConfigureAuth(IAppBuilder app)
中的这段代码:
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(10),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
特别是函数传递 user.GenerateUserIdentityAsync(manager))
您需要修改此方法 ApplicationUser.GenerateUserIdentityAsync
以恢复您的自定义声明(如果它们存在于 cookie 中)。
我正在制作一个使用 Identity 的 ASP.NET MVC 5 应用程序。身份验证的一部分包括将声明存储在 cookie 中,而不将其保存到数据库中,因为该声明只能持续到用户注销为止。此声明在注销后添加到用户身份,并且用户可以在登录时随时更改声明的值。为此,我使用以下代码:
var AuthenticationManager = HttpContext.GetOwinContext().Authentication;
var Identity = User.Identity as ClaimsIdentity;
if (Identity.HasClaim(c => c.Type == "custom"))
{
Identity.RemoveClaim(Identity.FindFirst("custom"));
}
Identity.AddClaim(new Claim("custom", "value", ClaimValueTypes.Integer32));
AuthenticationManager.AuthenticationResponseGrant =
new AuthenticationResponseGrant(new ClaimsPrincipal(Identity), new AuthenticationProperties { IsPersistent = true });
这在一段时间内工作正常...但是在用户登录后大约十分钟,索赔就消失了!我怎样才能使声明在注销之前一直存在?
您的问题是 Startup.Auth.cs
中配置的 SecurityStampValidator
正在擦除存储在 cookie 中的自定义声明。
您需要查看 ConfigureAuth(IAppBuilder app)
中的这段代码:
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(10),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
特别是函数传递 user.GenerateUserIdentityAsync(manager))
您需要修改此方法 ApplicationUser.GenerateUserIdentityAsync
以恢复您的自定义声明(如果它们存在于 cookie 中)。