C# IsAuthenticated在到期后仍为真
我被要求在新的一个月开始时强制重新授权用户(我们有每月订阅模式)。为了实现这一点,并且不影响应用程序中使用的其他身份验证提供程序,我修改了登录调用,如下所示: 之前:C# IsAuthenticated在到期后仍为真,c#,authentication,asp.net-core,cookies,C#,Authentication,Asp.net Core,Cookies,我被要求在新的一个月开始时强制重新授权用户(我们有每月订阅模式)。为了实现这一点,并且不影响应用程序中使用的其他身份验证提供程序,我修改了登录调用,如下所示: 之前: await HttpContext.SignInAsync(authorizationProvider.GetClaimsPrincipal()); 之后: await HttpContext.SignInAsync(authorizationProvider.GetClaimsPrincipal(), authorizatio
await HttpContext.SignInAsync(authorizationProvider.GetClaimsPrincipal());
之后:
await HttpContext.SignInAsync(authorizationProvider.GetClaimsPrincipal(), authorizationProvider.GetAutheticationProperties());
public AuthenticationProperties GetAutheticationProperties() =>
new AuthenticationProperties
{
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(1),
IsPersistent = true,
AllowRefresh = false
};
请注意,出于测试目的,ExpiresUtc
将在未来设置为1min;一旦实施工作开始,将计算到月底
我希望我们的身份(扩展ClaimsIdentity
)在ExpiresUtc
到达后将获得其属性IsAuthorized
false,但它没有。阅读它说明
如果身份已通过身份验证,则为true;否则,错误。
备注:如果AuthenticationType属性不是null或空字符串,则为true
现在我很困惑。。到期后我会期待什么?分别,标识如何变得IsAuthenticated==false
我们目前使用asp.net core 2.2,并且正在迁移到3
在应用程序启动(startup.cs
)时,身份验证是这样注册的:
当用户通过身份验证时,将发出票据。要在DB查询中保存,该票证将每隔一段时间(默认为20分钟)重新验证。当身份验证票证过期时,在重新验证票证之前,该票证实际上不会生效,因此,如果您的验证间隔为20分钟,则无论您将过期时间设置为什么,它们将保持登录至少20分钟 你可以降低这个间隔,如果你愿意的话,可以一直降到零,这意味着每次请求都会重新验证票证。但是,间隔越小,数据库必须输入的查询就越多,因此这是一个折衷方案。要更改间隔,只需添加:
services.Configure<SecurityStampValidatorOptions>(c =>
{
c.ValidationInterval = TimeSpan.FromMinutes(1);
});
services.Configure(c=>
{
c、 ValidationInterval=TimeSpan.FromMinutes(1);
});
哦,很高兴知道,谢谢!等待20分钟并没有让我退出。调用_httpContext.User.identifications时,我是否希望不会收回过期的标识?如果用户已真正注销,则不会有httpContext.User
。
services.Configure<SecurityStampValidatorOptions>(c =>
{
c.ValidationInterval = TimeSpan.FromMinutes(1);
});