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

ASP.NET Core使用Bearer令牌访问授权接口返回401未授权求助

问题排查与解决

1. 中间件顺序错误(核心原因)

你把认证与授权中间件的顺序写反了,ASP.NET要求先执行认证中间件,再执行授权中间件,否则授权逻辑无法获取到认证后的用户上下文,直接返回401。

错误代码:

app.UseAuthorization();
app.UseAuthentication();

修正后的正确顺序:

app.UseAuthentication();
app.UseAuthorization();

2. 其他补充排查要点

  • 验证JWT令牌有效性:
    手动解析生成的令牌,确认:

    • 签名算法和配置一致(你用的是HS256,对应HmacSha256Signature)
    • 令牌未过期(检查exp字段)
    • 令牌中包含id claim且格式为整数
  • 确认密钥完全一致:
    生成JWT时使用的密钥,必须和认证配置里的settings.Bearer完全匹配,且编码方式统一(你用了Encoding.ASCII,生成令牌时也要用相同编码)。

  • 检查请求头格式:
    确保请求头无多余空格,正确格式为:Authorization: Bearer <你的JWT令牌>,注意Bearer后只有一个空格。

  • 校验令牌生成逻辑:
    确认_authService.Login里的JWT生成逻辑正确,示例正确写法如下:

    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes(settings.Bearer);
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new[] { new Claim("id", userId.ToString()) }),
        Expires = DateTime.UtcNow.AddDays(7),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
    return tokenHandler.WriteToken(token);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:55:27