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

.NET Core WebAPI传递JWT令牌仍返回Unauthorized错误求助

.NET Core WebAPI JWT认证返回Unauthorized排查方案

服务端配置排查

  • 核对AddJwtBearer配置与Token生成逻辑的**密钥、颁发者(Issuer)、受众(Audience)**必须完全一致,比如生成Token用new SymmetricSecurityKey(Encoding.UTF8.GetBytes("my-32-char-secret")),认证配置里就得用同一个密钥,差一个字符都不行。
  • 检查中间件注册顺序:UseAuthentication()和UseAuthorization()必须放在UseRouting()之后,UseEndpoints()之前,顺序搞反会导致认证逻辑不触发。
  • 确认Token过期时间不要设置过短,比如测试时可以设成1小时,避免请求时Token已经失效。
  • 确保需要保护的API接口上添加了[Authorize]特性,没加的话不会触发认证,但既然返回Unauthorized,大概率是加了,还是确认下。

客户端请求排查

  • 严格检查请求头格式:必须是Authorization: Bearer <你的Token>,重点注意Bearer后面的空格,很多人漏掉这个空格导致认证失败。
  • 确认Token完整无修改:复制Token时要从头到尾全选,包括开头的eyJ和结尾的签名部分,别漏了字符。
  • 跨域场景下,要确保服务端CORS配置允许携带Authorization头,比如在CORS配置里加AllowAnyHeader(),或者明确指定允许该头。

Payload与验证规则排查

  • 生成Token时要包含必要的Claims,比如NameIdentifier、Name这类常用字段,部分默认认证逻辑依赖这些Claims,缺失可能导致认证不通过。
  • 检查TokenValidationParameters的配置:ValidateIssuerSigningKey必须设为true;如果开启了ValidateIssuer或ValidateAudience,必须和生成Token时的Issuer、Audience完全匹配,否则会验证失败。

快速排查技巧

  • 开启认证调试日志:在appsettings.json里添加如下配置,查看详细的认证失败原因:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore.Authentication": "Debug"
    }
  }
}
  • 服务端本地验证Token:在生成Token的代码后面加一段验证逻辑,直接排查Token本身是否有效:
var tokenHandler = new JwtSecurityTokenHandler();
var validationParams = new TokenValidationParameters
{
    ValidateIssuerSigningKey = true,
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("你的密钥")),
    ValidateIssuer = true,
    ValidIssuer = "你的颁发者",
    ValidateAudience = true,
    ValidAudience = "你的受众",
    ValidateLifetime = true
};

try
{
    tokenHandler.ValidateToken(生成的Token, validationParams, out _);
    // 走到这说明Token本身没问题,问题出在请求传递或中间件配置
}
catch (Exception ex)
{
    // 打印ex.Message,直接看到验证失败的具体原因,比如密钥不匹配、过期等
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:02:16