C# 为什么User.Identity.IsAuthenticated在基于身份Cookie的身份验证中经过一段时间后设置为false
我正在用EF core在asp.net core 2.0中开发一个API。我在C# 为什么User.Identity.IsAuthenticated在基于身份Cookie的身份验证中经过一段时间后设置为false,c#,cookies,asp.net-identity,asp.net-core-2.0,asp.net-core-webapi,C#,Cookies,Asp.net Identity,Asp.net Core 2.0,Asp.net Core Webapi,我正在用EF core在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.
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 brower F12)。经过一段时间(20-30)分钟后,所有索赔不再存在
另外,User.Identity.IsAuthenticated
已设置为false
。因此,我无法解析数据库上下文(利用声明值)
这是asp.net identity core中的预期行为吗?如果是这样,我如何使用中间件解决方案来删除cookie或其他一些解决方法?因为一旦删除cookie,用户就可以重新登录
内容更新
services.AddIdentity<User, Role>()
.AddEntityFrameworkStores<DataContext>()
.AddDefaultTokenProviders();
在useContextAuthorizationMiddleware
中,我检查了这个
public Task Invoke(HttpContext httpContext)
{
var isAuthenticated = httpContext.User.Identity.IsAuthenticated;
//...
return _next(httpContext);
}
注意:您不应该使用
options.Cookie.Expiration
。它被ExpireTimeSpan
(您也正在设置)替换。您正在呼叫app.UseAuthentication
?您正在调用services.AddIdentity
来添加标识,还是调用services.AddAuthentication
和CookieAuthenticationDefaults.AuthenticationScheme
来映射到HttpContext.User
?看看。@Dean,更新了问题内容,很有趣。你是说在用户登录后的前20分钟,user.Identity.IsAuthenticated
是真的吗?然后在20分钟后,它被设置为false?同时-检查。我相信这对你的处境也是个好办法。没有院长。您不能在服务中使用cookie
选项。附加属性
。它已从core 2.0中删除。在1.xx中,根据文档,这是可能的。
public Task Invoke(HttpContext httpContext)
{
var isAuthenticated = httpContext.User.Identity.IsAuthenticated;
//...
return _next(httpContext);
}