You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中JWT令牌过期后仍可访问API的问题

JWT令牌过期后仍能访问API的问题排查与修复

问题分析与修复方案

结合你的代码,导致令牌过期后仍可调用API的核心问题及修复步骤如下:

1. 令牌缺失Issuer和Audience声明

你的Program.cs中开启了ValidateIssuer和ValidateAudience验证,但生成令牌的TokenDescriptor未配置这两个属性。当令牌中缺失iss和aud声明时,验证逻辑可能出现异常跳过,导致过期检查失效。

修复代码:
修改生成令牌的逻辑,在TokenDescriptor中补充Issuer和Audience配置:

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(authClaims),
    Expires = DateTime.UtcNow.AddMinutes(1),
    // 新增以下两行,与验证配置保持一致
    Issuer = _configuration.GetSection("JWT:ValidIssuer").Value,
    Audience = _configuration.GetSection("JWT:ValidAudience").Value,
    SigningCredentials = new SigningCredentials(authSigningKey, SecurityAlgorithms.HmacSha256Signature)
};

2. 中间件顺序错误

你的中间件执行顺序为UseAuthentication() → UseAuthorization() → UseCors("CorsPolicy"),正确顺序应为CORS中间件优先于认证、授权中间件,否则可能导致认证逻辑未被正确触发。

修复代码:
调整中间件顺序:

app.UseCors("CorsPolicy"); // 移至认证前
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

3. 确认令牌生成的正确性

  • 确保生成的令牌包含exp(过期时间)声明:可以用JWT解析工具查看令牌内容,确认exp字段存在且值为当前时间+1分钟的UTC时间戳。
  • 确保返回给客户端的是正确的JWT字符串:在调用GenerateJwt后,需通过JwtSecurityTokenHandler.WriteToken(token)将SecurityToken转换为标准JWT格式:
    var token = GenerateJwt(apiInfo, input);
    var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
    return tokenString; // 返回该字符串给客户端
    

4. 排查认证日志(可选)

如果修复后问题仍存在,可添加认证事件日志定位问题:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o =>
{
    // 原有配置...
    o.Events = new JwtBearerEvents
    {
        OnAuthenticationFailed = context =>
        {
            Console.WriteLine($"认证失败原因: {context.Exception.Message}");
            return Task.CompletedTask;
        },
        OnTokenValidated = context =>
        {
            Console.WriteLine($"令牌验证通过,过期时间: {context.SecurityToken.ValidTo}");
            return Task.CompletedTask;
        }
    };
});

通过日志可明确验证过程中是否触发过期检查,以及具体失败原因。


内容的提问来源于stack exchange,提问作者Slow Death

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:27:14