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

持有有效JWT Token仍返回401 Unauthorized的原因排查

问题原因及解决方案

1. 密钥处理逻辑不一致(核心问题)

生成Token和验证Token时,对密钥的处理方式完全不同,导致签名验证失败:

  • Token生成代码中:配置的Jwt:Secret是Base64编码字符串,通过Convert.FromBase64String(base64Key)转成字节数组作为密钥
  • 验证配置中:直接用Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Secret"])把配置值当作普通UTF8字符串转字节,这和生成时的密钥完全不匹配,JWT签名验证不通过,自然返回401。

修复方法:
把program.cs里的密钥解析逻辑改成和生成时一致:

IssuerSigningKey = new SymmetricSecurityKey(
    Convert.FromBase64String(builder.Configuration["Jwt:Secret"])
),

2. 中间件顺序错误(常见坑)

检查program.cs中的中间件注册顺序,必须保证:

app.UseAuthentication(); // 先执行身份验证
app.UseAuthorization();  // 再执行授权逻辑

而且这两个中间件要放在app.UseRouting()之后、app.MapControllers()之前,否则身份验证流程不会被正确触发。

3. 接口冗余代码提示

添加[Authorize]特性后,ASP.NET Core框架已经自动完成Token的验证、解析和用户身份注入,不需要手动从请求头提取Token解析。你可以直接通过User.Claims获取用户信息,比如:

var userId = User.FindFirstValue("UserId");
var email = User.FindFirstValue(ClaimTypes.Name);

接口里手动解析Token的代码可以完全删除,既简化逻辑又避免冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:53:09