我正在用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);
}