net core api 是不是检查每个请求的 jwt 到期日期? [复制]

Posted

技术标签:

【中文标题】net core api 是不是检查每个请求的 jwt 到期日期? [复制]【英文标题】:Does net core api check jwt expiry date on every request? [duplicate]net core api 是否检查每个请求的 jwt 到期日期? [复制] 【发布时间】:2020-04-08 21:43:06 【问题描述】:

我已经设置了一个 net core api 服务器。我通过 Blazor 客户端应用程序发送我的请求。我将每个令牌的到期时间设置为 2 分钟,但令牌的工作时间约为 7 分钟。 api 会检查每个请求的过期日期吗?

我使用的代码如下所示。在 startup.cs 我有

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                    .AddJwtBearer(options =>
                    
                            options.TokenValidationParameters = new TokenValidationParameters
                            
                            ValidateIssuer = true,
                            ValidateAudience = true,
                            ValidateLifetime = true,
                            ValidateIssuerSigningKey = true,
                            ValidIssuer = Configuration["JwtIssuer"],
                            ValidAudience = Configuration["JwtAudience"],
                            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSecurityKey"]))
                        ;
                        );

在用户登录时,会发出这样的令牌

var expiry = DateTime.UtcNow.AddMinutes(2); 

            var token = new JwtSecurityToken(
                _configuration["JwtIssuer"], // read from appsetttings.json
                _configuration["JwtAudience"], // read from appsettings.json
                claims, // claims added here
                expires: expiry,
                signingCredentials: creds // signature
            );

我有两个请求:第一个请求是在 11:52 成功,而到期日期是 11:49(您可以在下一张图片中看到)

第二个是在 11:54 不成功

【问题讨论】:

【参考方案1】:

它实际上是一个消除服务器时钟之间不同步的功能,你可以像这样控制它,所以是的,令牌验证会检查每个请求的到期日期:

    var expiry = DateTime.UtcNow.AddMinutes(2); 

                var token = new JwtSecurityToken(
                    ClockSkew = TimeSpan.FromMinutes(5)
                    _configuration["JwtIssuer"], // read from appsetttings.json
                    _configuration["JwtAudience"], // read from appsettings.json
                    claims, // claims added here
                    expires: expiry,
                    signingCredentials: creds // signature
                );

【讨论】:

以上是关于net core api 是不是检查每个请求的 jwt 到期日期? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API + Angular 对预检请求的响应未通过访问控制检查:预检请求不允许重定向

每个请求的 ASP.NET Core API JSON 序列化程序设置

ASP.Net Core API 中的请求验证

ASP.Net Core 2.1 API JWT 无 cookie 会话?

根据 ASP.NET Core 请求标头中提供的 API 密钥授权用户

检查用户是不是在 ASP.NET Core 中使用基于令牌的身份验证登录