为什么一段时间后在基于身份Cookie的身份验证中User.Identity.IsAuthenticated设置为false

时间:2018-08-19 15:19:08

标签: c# cookies asp.net-identity asp.net-core-2.0 asp.net-core-webapi

我正在用EF核心在asp.net核心2.0中开发API。我已经在startup.cs中配置了身份Cookie身份验证,如下所示。

services.ConfigureApplicationCookie(options =>
{
    // Cookie settings
    options.Cookie.HttpOnly = true;
    options.Cookie.Name = "example-cookie-name";
    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
    options.Cookie.SameSite = SameSiteMode.None;
    options.ExpireTimeSpan = TimeSpan.FromDays(14); 
    options.SlidingExpiration = true;
    options.Cookie.Expiration = TimeSpan.FromDays(14);
});

当用户登录api时,它将创建一个cookie,将到期时间设置为1969-12-31T23:59:59.000Z(从Chrome浏览器F12中提取)。经过一段时间(20-30)分钟后,所有索赔不再存在。

此外,User.Identity.IsAuthenticated已设置为false。因此,我无法解析数据库上下文(使用声明值)。

这是asp.net身份核心中的预期行为吗?如果是这样,我如何使用中间件解决方案删除Cookie或其他解决方法来做到这一点?因为一旦删除Cookie,用户就可以重新登录。

内容已更新

services.AddIdentity<User, Role>()
.AddEntityFrameworkStores<DataContext>()
.AddDefaultTokenProviders();

也在

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 ...
 app.UseAuthentication();
 app.UseContextAuthorizeValidatorMiddleware();
 app.UseMvc();
}

UseContextAuthorizeValidatorMiddleware内部,我选中了此

public Task Invoke(HttpContext httpContext)
{
  var isAuthenticated = httpContext.User.Identity.IsAuthenticated;
 //...
  return _next(httpContext);
}

0 个答案:

没有答案