.net核心身份动态更改到期身份验证cookie

时间:2020-02-19 10:24:58

标签: c# cookies .net-core asp.net-core-webapi

我有一个带有.NET Core Identity的.NET Core 3.1 Web API应用程序。 在Startup.cs中,我有以下代码:

services.ConfigureApplicationCookie(options =>
{
    options.ExpireTimeSpan = TimeSpan.FromHours(2);
});

但是对于某些用户,我有不同的到期时间值。

我可以动态覆盖auth cookie的到期时间吗?如果是的话,最好的方法是什么?也许SignInManager<...>UserManager<...>中有一个选项可以覆盖此值?

2 个答案:

答案 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)
});