изменить срок действия auth cook ie динамически. net идентификатор ядра - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть. NET Приложение Core 3.1 Web API с. NET Core Identity. В Startup.cs у меня есть следующий код:

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

Но для некоторых пользователей у меня есть другое значение времени истечения.

Могу ли я динамически перезаписать время истечения auth cook ie? И если да, каков наилучший способ сделать это? Может быть, в SignInManager<...> или UserManager<...> есть опция, позволяющая перезаписать это значение?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Cookies для идентификации - это AspNetCore.Identity.Application, а его ExpireTimeSpan установлен в HandleSignInAsyn c.

Вы можете использовать событие ie * cook 100 *. динамически установить время истечения для указанного c пользователя:

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();
        }      

    };
});
0 голосов
/ 20 февраля 2020

Я использую этот способ:

await this._signInManager.SignInAsync(user, new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
    ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(60)
});
...