Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# ASP.Net核心中检查令牌过期的性能方法_C#_Asp.net Core_Asp.net Core 3.1 - Fatal编程技术网

C# ASP.Net核心中检查令牌过期的性能方法

C# ASP.Net核心中检查令牌过期的性能方法,c#,asp.net-core,asp.net-core-3.1,C#,Asp.net Core,Asp.net Core 3.1,目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的OnValidatePrincipal事件中执行以下操作: 通过调用GetTokenValue从cookie中获取id\u令牌 调用JwtSecurityTokenHandler的ValidateToken将令牌转换为json 从json中获取ValidTo属性 比较它以查看令牌是否过期 我觉得每次打电话都这么做有点过分。我想知道是否有什么方法可以将ValidTo值存储在cookie本身中。这样,我就不必解析j

目前,对于每次调用我的ASP.NET Core MVC应用程序,我都会在cookie的
OnValidatePrincipal
事件中执行以下操作:

  • 通过调用
    GetTokenValue
    从cookie中获取
    id\u令牌
  • 调用JwtSecurityTokenHandler的ValidateToken将令牌转换为json
  • 从json中获取
    ValidTo
    属性
  • 比较它以查看令牌是否过期
  • 我觉得每次打电话都这么做有点过分。我想知道是否有什么方法可以将ValidTo值存储在cookie本身中。这样,我就不必解析json来检查每次调用的到期时间

    有没有一种方法可以将
    id\u令牌
    有效存储到
    中,这样一个调用就可以让我过期:
    GetTokenValue(“id\u令牌有效到”)
    检查此链接:

    但简单地说,您必须在启动文件中添加如下内容:

    services.AddAuthentication(x =>
                {
                    x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                .AddJwtBearer(x =>
                {
                    x.RequireHttpsMetadata = false;
                    x.SaveToken = true;
                    x.TokenValidationParameters = new TokenValidationParameters
                    {
                        IssuerSigningKey = key,
                        ValidateIssuerSigningKey = true,
                        ValidateLifetime = true,
                        ValidateIssuer = false,
                        ValidAudience =Configuration["Tokens:Audience"] ,
                        ValidateAudience = true
                    };
                });
    

    然后,您可以在基本控件或授权筛选器中检查User.Identity.IsAuthenticated。如果令牌过期,则为false。在此之后,如果需要,您可以选择过期日期。

    不要将ValidTo值存储在违背使用JWT目的的cookie中。您只能信任JWT中存储的信息。您是否测量了检查令牌是否过期所需的时间?我怀疑这有什么好担心的。一个安全的系统比让您的服务器快速响应几毫秒更有价值。web服务器是无状态的,每个请求都需要验证。无法信任该用户。“为什么是,我是一个管理员用户,老实说……”我不知道如果令牌过期,
    IsAuthenticated
    将为假(尽管这是有道理的)。这将是一个很好的方式,使大多数电话不需要检查过期日期。(如果为false,我可以检查是否需要使用更新令牌。)谢谢!是的,如您所见,有一个选项ValidateLifetime=true检查令牌生存期。当答案对你有效时,请别忘了注明答案已被接受。