首页 > 解决方案 > 动态更改过期身份验证 cookie .net 核心身份

问题描述

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

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

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

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

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

解决方案


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

    };
});

推荐阅读