ASP .NET Core Cookie身份验证到期时返回时从时间戳更改为"会话"

sev*_*rin 5 asp.net asp.net-core-mvc asp.net-core

我使用ASP .NET Core RC1与Facebook身份验证和silding窗口cookie过期设置如下:

app.UseIdentity();
app.UseFacebookAuthentication();
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

这在用户首次登录时工作正常 - cookie过期设置正确.但是,当用户返回页面时,cookie的到期时间设置为"会话",因此实际上用户必须重新验证每次其他访问.

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

更新:我现在已经完成了一些没有SlidingExpiration的测试,问题仍然存在.返回页面后,cookie的到期时间将更改为"会话".我正在使用Chrome.

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

Sha*_*tin 4

简答

isPersistent: true调用时设置SignInManager.ExternalLoginSignInAsync

细节

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

_signInManager.ExternalLoginSignInAsync(
    info.LoginProvider, 
    info.ProviderKey, 
    isPersistent: true);     <------ set a persistent cookie.
Run Code Online (Sandbox Code Playgroud)

如果我们isPersistent: true在调用时设置ExternalLoginSignInAsync,这个启动配置...

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();
Run Code Online (Sandbox Code Playgroud)

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

MyApplicationCookie 是持久的。

...在浏览器会话中持续存在。