AspNetCore:OpenId Cookies始终显示expires=1969-12-31,即使设置了IsPersistent=true和ExpireTimeSpan

AspNetCore:OpenId Cookies始终显示expires=1969-12-31,即使设置了IsPersistent=true和ExpireTimeSpan,cookies,asp.net-identity,session-cookies,identity,Cookies,Asp.net Identity,Session Cookies,Identity,使用ASPNETCORE OpenId身份验证中间件和Cookie中间件。我总是看到来自OpenId身份验证的cookie被设置为在1969年12月31日到期(在Chrome调试器中)。我假设这意味着cookie是会话cookie;我想让它们成为持久的cookie,这样用户登录的频率就会降低。因此,我添加了ExpireTimeSpan和IsPersistent=true,正如在其他帖子中建议的那样,但我仍然看到我的cookie Expires是1969-12-31 我做错了什么 service

使用ASPNETCORE OpenId身份验证中间件和Cookie中间件。我总是看到来自OpenId身份验证的cookie被设置为在1969年12月31日到期(在Chrome调试器中)。我假设这意味着cookie是会话cookie;我想让它们成为持久的cookie,这样用户登录的频率就会降低。因此,我添加了ExpireTimeSpan和IsPersistent=true,正如在其他帖子中建议的那样,但我仍然看到我的cookie Expires是1969-12-31

我做错了什么

services.AddAuthentication(选项=>
{
options.DefaultChallengeScheme=OpenIdConnectDefaults.AuthenticationScheme;
options.DefaultScheme=CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddAzureAd(选项=>
{
绑定(“AzureAd”,选项);
})
.AddCookie(p=>
{
p、 ExpireTimeSpan=从天开始的时间跨度(30);
p、 slidengexpiration=true;
});
服务。配置(道具=>
{
props.ispersist=true;
props.ExpiresUtc=新的日期时间偏移量(DateTime.Now,TimeSpan.FromDays(30));
});

在aspnetcore安全论坛上获得帮助,并达成以下解决方案:

        .AddCookie(p =>
        {
            p.SlidingExpiration = true;
            p.Events.OnSigningIn = (context) =>
            {
                context.CookieOptions.Expires = DateTimeOffset.UtcNow.AddDays(30);
                return Task.CompletedTask;
            };
        });
我还实现了一个注销页面(调用
AuthenticationHttpContextExtensions.SignOutAsync(HttpContext)
),使用户可以更好地控制cookie的生存时间

        .AddCookie(p =>
        {
            p.SlidingExpiration = true;
            p.Events.OnSigningIn = (context) =>
            {
                context.CookieOptions.Expires = DateTimeOffset.UtcNow.AddDays(30);
                return Task.CompletedTask;
            };
        });