c# - 为什么在基于身份 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);
}
解决方案
推荐阅读
- angular - 自定义表单控件上的 Angular ExpressionChangedAfterItHasBeenCheckedError
- jenkins - Jenkins pipeline to SSH into an instance and call a function
- mysql - 这个 mySQL 查询有什么问题?(连接和转换)
- r - How to obtain unique set of rows in nested data frame?
- python - Tensorflow object detection - own classes inference graph train/export error (tensor shape)
- git - How could I backup/version control my file (having IDE settings) at some other path in git?
- wagtail - 让鹡鸰对文档使用正确的 mime 类型
- android - 将选项卡添加到操作栏时,对象引用未设置为对象的实例
- asp.net - 当我尝试更改某些内容时,Asp.net 核心没有更新
- jquery - 为什么我不能限制选中复选框的数量?