开发者社区 问答 正文

Net Core api是否会在每个请求中检查jwt的到期日期?

我已经设置了一个网络核心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,这是不成功的

展开
收起
几许相思几点泪 2019-12-16 20:14:43 899 分享 版权
阿里云 AI 助理回答

根据您提供的信息,您的API配置看起来是正确的,因为它确实启用了对JWT令牌有效期限(Lifetime)的验证。ValidateLifetime = true这一行确保了在每次请求中,JWT中间件都会检查令牌是否过期。

如果您的客户端在令牌实际上已经过期后仍然能够成功发送请求长达7分钟,这可能不是由API服务器端的配置直接引起的。有几个可能的原因需要考虑:

  1. 时钟偏移:确保API服务器和客户端(或颁发JWT的服务器)的系统时间是同步的。有时区差异或系统时钟不准确可能导致过期时间判断不一致。

  2. 令牌缓存:检查客户端是否有任何机制错误地缓存了JWT令牌,并在过期后继续使用旧令牌。Blazor应用中可能会有处理身份验证逻辑的地方无意中复用了令牌。

  3. 中间件或代理服务器:如果您的架构中包含负载均衡器、反向代理(如Nginx、HAProxy)或其他网络中间件,这些组件有时会缓存响应,特别是当配置不当的时候。确认这些组件没有以某种方式缓存JWT验证的结果或整个响应。

  4. JWT刷新机制:虽然您没提到,但有时候应用程序设计中会包含自动刷新令牌的机制。检查是否有代码逻辑在尝试刷新令牌并在后台透明地使用新令牌重新尝试请求。

  5. 调试和日志:为了更深入地了解问题,查看API服务器的日志记录,特别是与身份验证相关的部分。这可以帮助确认服务器端实际接收到的令牌及其验证结果,以及是否真的忽略了过期时间。

建议您首先从时间同步和客户端缓存方面进行排查,同时仔细审查API日志以获取更多线索。如果问题依然存在,考虑是否有其他网络组件可能影响到了请求处理流程。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: