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

ASP.NET Core Web API中Authorize特性始终返回401错误排查

解决ASP.NET Core JWT认证返回401的排查思路
  • 修正中间件顺序
    你当前的中间件顺序不符合ASP.NET Core的执行规则,正确顺序要求UseRouting在前,UseAuthentication必须放在UseRouting之后、UseAuthorization之前,修正后的Configure代码如下:
app.UseHttpsRedirection();
app.UseRouting();
// 认证中间件必须放在路由之后、授权之前
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
  • 检查请求头格式
    请求的Authorization头必须符合Bearer {你的Token}格式,注意Bearer和Token内容之间必须有一个空格,不能直接只传Token字符串。
  • 验证JWT配置一致性
    确认认证配置中用到的jwtConfig.Issuer、jwtConfig.Audience、jwtConfig.Secret三个参数,和生成Token时注入的_jwtconfig对应值完全一致,无大小写差异、多余空格或配置读取错误的问题。
  • 匹配HTTPS配置
    你配置了RequireHttpsMetadata = true,该配置要求请求必须走HTTPS协议,如果本地调试用的是HTTP地址,会直接验证失败,本地测试可临时改为false,生产环境再开启即可。
  • 调整时间校验规则
    你设置了ClockSkew = TimeSpan.Zero,代表完全不允许服务器时间有任何偏差,如果服务器时间不准确,或者Token生成后已经超过15分钟有效期,都会直接验证失败。可以临时调整ClockSkew为TimeSpan.FromMinutes(5)允许小范围时间偏差,同时确认使用的Token未过期。
  • 检查Authorize特性配置
    确认接口上的[Authorize]特性没有指定其他非JWT的认证方案,如果指定了非默认的方案,也会导致认证不通过。
  • 开启调试日志定位问题
    在appsettings.json的Logging配置中添加以下配置,开启JWT认证的调试日志,可直接看到验证失败的具体原因(比如签名无效、颁发者不匹配、Token过期等):
"Logging": {
  "LogLevel": {
    "Microsoft.AspNetCore.Authentication.JwtBearer": "Debug"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:01