我正在使用带有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上运行。这可能是一个因素吗?
答案 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 ...
...在浏览器会话中持续存在。