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

时间:2016-04-11 21:24:17

标签: asp.net asp.net-core asp.net-core-mvc

我正在使用带有Facebook身份验证的ASP .NET Core RC1和设置如下的silding窗口cookie:

app.UseIdentity();
app.UseFacebookAuthentication();

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的到期时间设置为“会话”,因此实际上用户必须重新验证每次其他访问。

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

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

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

1 个答案:

答案 0 :(得分:3)

简答

在致电isPersistent: true时设置SignInManager.ExternalLoginSignInAsync

详细

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

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

如果我们在调用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();

...导致此应用程序cookie ...

MyApplicationCookie is persistent.

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