在 ASP.Net Core 中检查令牌过期的高性能方法

Vac*_*ano 5 c# .net-core asp.net-core asp.net-core-3.1

目前,对于 ASP.NET Core MVC 应用程序的每次调用,我都会在OnValidatePrincipalcookie 的情况下执行以下操作:

  1. id_token通过调用 来获取cookie GetTokenValue
  2. 调用JwtSecurityTokenHandler的 ValidateToken 将 token 转为 json。
  3. ValidTo从 json 中获取属性。
  4. 比较它以查看令牌是否过期。

对我来说,每次通话都这样做似乎有点过分了。我想知道是否有什么办法可以将 ValidTo 值存储在 cookie 本身中。这样我就不必解析 json 来检查每次调用是否过期。

有没有办法让我存储id_token' ValidTo,这样像这样的调用就可以给我过期时间: GetTokenValue("id_token_valid_to")

Ser*_*rge 6

检查此链接: https://www.c-sharpcorner.com/article/jwt-json-web-token-authentication-in-asp-net-core/

但简而言之,您必须在启动文件中添加如下内容:

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
                };
            });
Run Code Online (Sandbox Code Playgroud)

之后,您可以在基本控制器或授权过滤器中检查 User.Identity.IsAuthenticated 。如果令牌已过期,则这是错误的。在此之后,如果需要,您可以设置到期日期。