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

.NET Core 7授权控制器始终返回401未授权问题求助

.NET 7 JWT认证返回401但相同代码新项目正常的排查方案

1. 检查认证中间件顺序

你的Program.cs中缺少app.UseAuthentication()调用,正确的中间件执行顺序必须是认证在前,授权在后:

app.UseRouting();
app.UseAuthentication(); // 需添加在UseAuthorization之前
app.UseAuthorization();

即使你说新项目用相同代码正常,也可能是新项目模板默认包含了该中间件,或是粘贴代码时的疏漏。

2. 对比两个项目的配置文件

代码一致不代表配置文件完全相同,appsettings.json(或对应环境的配置文件)中的JWT参数差异是常见问题:
确保第一个项目的配置文件包含正确的JWT验证参数,示例:

"Jwt": {
  "Issuer": "your-issuer-value",
  "Audience": "your-audience-value",
  "Key": "your-secret-key-with-at-least-16-characters"
}

调用AddJwtBearer()时,框架会自动读取这些配置,若第一个项目缺少或配置错误,会直接导致令牌验证失败。

3. 核对项目启动环境

确认两个项目的启动环境(如Development/Production)是否一致。不同环境会加载对应的配置文件,若第一个项目使用Production环境,但appsettings.Production.json未配置JWT参数,会触发401。

4. 检查NuGet包版本

对比两个项目中Microsoft.AspNetCore.Authentication.JwtBearer包的版本。版本差异可能导致认证逻辑的细微变化,建议将第一个项目的包版本更新至与新项目一致。

5. 验证请求与令牌的匹配性

  • 确认Postman中的请求URL、HTTPS设置与新项目完全一致,避免因证书不信任导致请求异常;
  • 使用JWT解析工具检查令牌的iss(签发者)、aud(受众)声明是否与第一个项目的配置匹配,声明不匹配会直接返回401。

6. 排查项目模板初始化差异

第一个项目可能在创建时启用了其他认证相关的模板选项(如Azure AD认证),导致默认认证逻辑冲突;而新项目为干净的Web API模板,无额外冲突配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:32:42