![](/img/trans.png)
[英]How to Change Persistent Cookie Expiration Time in .Net Core 3.1 Identity Server 4
[英]change expiration auth cookie dynamically .net core identity
我有带有 .NET Core Identity 的 .NET Core 3.1 Web API 应用程序。 在Startup.cs
我有以下代码:
services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromHours(2);
});
但是对于某些用户,我有不同的到期时间值。
我可以动态覆盖 auth cookie 的过期时间吗? 如果是,最好的方法是什么? 也许SignInManager<...>
或UserManager<...>
中有一个选项可以覆盖这个值?
Identity Cookie 是 AspNetCore.Identity.Application,其 ExpireTimeSpan 由HandleSignInAsync设置。
您可以使用 cookie 的OnSigningIn
事件为特定用户动态设置过期时间:
services.ConfigureApplicationCookie(opt => {
opt.Events.OnSigningIn = async (signinContext) => {
// you can use the pricipal to query claims
var email = signinContext.Principal.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
if ("xxxx@hotmail.com".Equals(email))
{
// set the expiration time according to claims dynamically
signinContext.Properties.ExpiresUtc = DateTimeOffset.Now.AddSeconds(100);
signinContext.CookieOptions.Expires = signinContext.Properties.ExpiresUtc?.ToUniversalTime();
}
else
{
signinContext.Properties.ExpiresUtc = DateTimeOffset.Now.AddMinutes(60);
signinContext.CookieOptions.Expires = signinContext.Properties.ExpiresUtc?.ToUniversalTime();
}
};
});
我用这种方式:
await this._signInManager.SignInAsync(user, new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60)
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.