ASP.NET核心Cookie身份验证过期时间从时间戳更改为;会议“;返回时

ASP.NET核心Cookie身份验证过期时间从时间戳更改为;会议“;返回时,asp.net,asp.net-core,asp.net-core-mvc,Asp.net,Asp.net Core,Asp.net Core Mvc,我正在使用ASP.NET Core RC1,Facebook身份验证和滑动窗口cookie过期设置如下: app.UseIdentity(); app.UseFacebookAuthentication(); 及 services.AddIdentity((选项=> { options.Cookies.ApplicationCookie.CookieName=“myauthcookie”; options.Cookies.applicationcokie.ExpireTimeSpan=Time

我正在使用ASP.NET Core RC1,Facebook身份验证和滑动窗口cookie过期设置如下:

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

services.AddIdentity((选项=>
{
options.Cookies.ApplicationCookie.CookieName=“myauthcookie”;
options.Cookies.applicationcokie.ExpireTimeSpan=TimeSpan.FromDays(5);
options.Cookies.applicationcokie.SlidingExpiration=true;
}))
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
当用户第一次登录时,这可以正常工作-cookie过期设置正确。但是,当用户返回页面时,cookie的过期时间设置为“会话”,因此实际上用户必须每隔一次访问重新验证一次

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

更新: 我现在已经做了一些没有滑动过期的测试,问题仍然是一样的。返回页面后,cookie的过期时间更改为“会话”。我用的是铬

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

简短回答 调用
SignInManager.ExternalLoginIgnnAsync
时,设置
isPersistent:true

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

_signInManager.ExternalLoginSignInAsync(
    info.LoginProvider, 
    info.ProviderKey, 
    isPersistent: true);     <------ set a persistent cookie.
…导致此应用程序cookie


…在浏览器会话中持续存在

facebook cookie是一个不同的cookie,您可能需要将其设置为与主应用程序相似的cookie,看看options.cookie.External…这很有意义。但是为什么我的auth cookie的过期日期设置正确呢?每次你得到应用程序cookie时,我都会登录Facebook,它应该按照配置工作,我只是猜测,作为Facebook过程的一部分,你可能会得到一些与外部cookie相互作用的逻辑,因此可能需要将其设置为类似的设置,如果我确定我会发帖回答的话,我只是在胡说八道谢谢你的回答,肖恩。尽管我没有在问题中指定它,但我已经在调用SignInManager时设置了“isPersistent:true”,因此我运行的代码实际上就是您发布的代码,这解释了为什么首次登录时cookie设置正确。我的问题是,在一些回访中,“过期日期”被覆盖并设置为“会话”。@fiskeboss这很奇怪。我没有经历过同样的行为。请尝试使用
options.Cookies.applicationcokie.ExpireTimeSpan=TimeSpan.fromsons(10)
并每五秒钟刷新一次页面,以查看cookie的情况。对我来说,每5秒刷新一次会将过期时间再推10秒。你怎么了?还有,你在什么网络浏览器上遇到这种情况?当试图将ExpireTimeSpan设置为2小时以下的任何值时,cookie根本没有设置,所以我甚至无法登录。也很奇怪。我用的是Chrome,我只是做了更多的实验,结果还是一样的。存储cookie时的ExpireTimeSpan阈值正好为2小时。Facebook登录和普通内置用户帐户都会出现这种情况。禁用SlidingExpiration也无济于事。我在本地的开发机器上进行了测试。
_signInManager.ExternalLoginSignInAsync(
    info.LoginProvider, 
    info.ProviderKey, 
    isPersistent: true);     <------ set a persistent cookie.
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();