我有一个带有.NET Core Identity的.NET Core 3.1 Web API应用程序。
在Startup.cs
中,我有以下代码:
services.ConfigureApplicationCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromHours(2);
});
但是对于某些用户,我有不同的到期时间值。
我可以动态覆盖auth cookie的到期时间吗?如果是的话,最好的方法是什么?也许SignInManager<...>
或UserManager<...>
中有一个选项可以覆盖此值?
答案 0 :(得分:1)
“身份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();
}
};
});
答案 1 :(得分:0)
我使用这种方式:
await this._signInManager.SignInAsync(user, new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60)
});