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

ASP.NET Core Web API中Jwt Bearer Token无效问题求助

解决ASP.NET Core Web API中JWT Bearer Token无效(返回Invalid_token)的问题

常见原因及解决办法

  • 签名密钥不匹配
    生成Token时使用的密钥,必须和API验证阶段配置的IssuerSigningKey完全一致,包括大小写、特殊字符。检查Program.cs/Startup.cs里的验证配置:

    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "你的发行者标识",
                ValidAudience = "你的受众标识",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("与生成Token时完全相同的密钥"))
            };
        });
    
  • Token已过期
    检查Token的exp(过期时间)字段,当ValidateLifetime设为true时,过期Token会直接被拒绝。可以用本地JWT解码工具查看exp对应的时间是否晚于当前时间。如果需要允许少量时间误差,可设置ClockSkew:

    options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(5); // 允许5分钟误差,或设为TimeSpan.Zero关闭误差
    
  • Issuer/Audience不匹配
    生成Token时指定的iss(发行者)和aud(受众),必须和API配置里的ValidIssuer、ValidAudience完全一致。如果不需要验证这两项,可临时将ValidateIssuer和ValidateAudience设为false,但生产环境不建议这么做。

  • Token格式或传递错误
    确保请求头的Authorization格式是Bearer {Token},注意Bearer后面必须有一个空格。另外检查Token本身是否完整(标准JWT是三段式:header.payload.signature),有没有被截断、编码错误。

  • 签名算法不匹配
    生成Token时使用的算法(比如HS256)要和API验证逻辑一致。检查生成Token的代码:

    var tokenHandler = new JwtSecurityTokenHandler();
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        // 其他配置项
        SigningCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256)
    };
    

    确保API验证时的算法和此处一致,默认JWT Bearer会自动匹配,但特殊场景下需要手动确认。

  • 自定义Claims验证失败
    如果项目中添加了自定义Claims验证逻辑,比如要求Token包含特定Claim值,需要检查Token里是否存在对应的Claim,以及验证逻辑是否有误。

调试技巧

  • 开启详细日志定位具体错误:
    在appsettings.json中添加日志配置:

    "Logging": {
        "LogLevel": {
            "Microsoft.AspNetCore.Authentication": "Debug"
        }
    }
    

    运行程序后查看日志,会输出更具体的无效原因,比如“Token expired”“Invalid signature”等。

  • 捕获验证失败事件查看详情:
    在AddJwtBearer配置中添加事件处理:

    options.Events = new JwtBearerEvents
    {
        OnAuthenticationFailed = context =>
        {
            // 打印或记录context.Exception.Message,获取具体错误信息
            Console.WriteLine($"验证失败:{context.Exception.Message}");
            return Task.CompletedTask;
        }
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:10:12