Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IsAuthenticated在到期后仍为真_C#_Authentication_Asp.net Core_Cookies - Fatal编程技术网

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);
});