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

.NET 6 Minimal API使用JWT授权返回401错误,求问题排查

JWT认证返回401错误的排查方案

已知信息

JWT Payload内容

{
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress": "sysadmin",
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname": "",
  "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname": "",
  "http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrators",
  "exp": 1667578481,
  "iss": "ISSUER",
  "aud": "AUDIENCE"
}

项目认证配置

builder.Services.AddAuthorization();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, opts =>
    {
        opts.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "ISSUER",
            ValidAudience = "AUDIENCE",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(key))
        };
    });
...
app.UseAuthentication();
app.UseAuthorization();

API端点配置

[Authorize]
IResult GetForcast()
{
  ...
}

可能的问题及解决办法

  • 签名密钥不匹配:确认key变量的值和生成JWT时使用的签名密钥完全一致,注意大小写、特殊字符,以及编码差异。如果生成JWT用的是UTF-8编码的密钥,把Encoding.ASCII改成Encoding.UTF8。
  • Token传递方式错误:请求时必须在Authorization请求头中携带Token,格式为Bearer <你的JWT字符串>,不能遗漏Bearer前缀,也不要有多余空格。
  • Token已过期:exp字段的时间戳1667578481对应2022年11月左右,检查当前时间是否已超过该期限,过期的话重新获取有效Token。
  • 中间件顺序错误:确保app.UseAuthentication()在app.UseAuthorization()之前执行,且要放在端点映射(比如app.MapControllers())之前,顺序颠倒会导致认证逻辑不生效。
  • 默认认证方案未明确:可以在AddAuthentication中直接指定默认Scheme,避免Scheme匹配问题:
    builder.Services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(...);
    
  • 查看详细错误日志:在appsettings.json中添加日志配置,获取认证失败的具体原因:
    {
      "Logging": {
        "LogLevel": {
          "Microsoft.AspNetCore.Authentication": "Debug"
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者brent.reynolds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:35:24