关于asp.net:ASP .NET Core Cookie身份验证过期在返回时从时间戳更改为”会话”

ASP .NET Core Cookie Authentication expiration changes from timestamp to “Session” upon return

我正在使用ASP.NET Core RC1,并进行如下设置的Facebook身份验证和屏蔽窗口Cookie过期:

1
2
app.UseIdentity();
app.UseFacebookAuthentication();

1
2
3
4
5
6
7
8
services.AddIdentity<ApplicationUser, IdentityRole>((options =>
{
    options.Cookies.ApplicationCookie.CookieName ="myauthcookie";
    options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(5);
    options.Cookies.ApplicationCookie.SlidingExpiration = true;
}))
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();

当用户首次登录时,此方法工作正常-cookie过期设置正确。但是,当用户返回页面时,cookie的过期设置为" Session ",因此在实践中,用户必须对每一次其他访问进行重新验证。

为什么会这样?我配置不正确吗?

更新:
我现在已经做了一些没有SlidingExpiration的测试,问题仍然存在。返回页面后,cookie的有效期更改为" Session "。我正在使用Chrome。

此外,我没有在https上运行。这可能是一个因素吗?


简短答案

在调用SignInManager.ExternalLoginSignInAsync时设置isPersistent: true

细节

在ASP.NET Core Web应用程序模板中,AccountController.ExternalLoginCallback方法包含以下代码:

1
2
3
4
_signInManager.ExternalLoginSignInAsync(
    info.LoginProvider,
    info.ProviderKey,
    isPersistent: true);     <------ set a persistent cookie.

如果在调用ExternalLoginSignInAsync时设置isPersistent: true,则此启动配置...

1
2
3
4
5
6
7
8
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
    {
        options.Cookies.ApplicationCookie.CookieName ="MyApplicationCookie";
        options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(5);
        options.Cookies.ApplicationCookie.SlidingExpiration = true;
    })
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

...此应用程序cookie中的结果...

MyApplicationCookie

...,它在浏览器会话之间持续存在。