![](/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.