首页 > 解决方案 > 为什么在基于身份 Cookie 的身份验证中一段时间​​后 User.Identity.IsAuthenticated 设置为 false

问题描述

我正在使用 EF 核心在 asp.net core 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);
}

标签: c#cookiesasp.net-identityasp.net-core-2.0asp.net-core-webapi

解决方案


推荐阅读