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

从.NET Core 2.x迁移至.NET 6后API调用出现401未授权问题求助

迁移后API调用401未授权的排查点

结合你提供的代码,以下是几个最可能的遗漏配置:

1. 缺失认证中间件,管道顺序错误

你的请求管道中只添加了UseAuthorization,但缺少UseAuthentication中间件,而认证逻辑必须在授权之前执行。.NET 6的最小API模型中,中间件顺序严格依赖调用顺序,正确的顺序应该是:

app.UseRouting();

app.UseCors("_myAllowSpecificOrigins");

// 必须在UseAuthorization之前添加
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

2. JWT令牌验证参数配置错误

在AddJwtBearer的配置中,你将authSettings.Authority加入了ValidAudiences列表,这是错误的:

ValidAudiences = new List<string> { authSettings.Audience, authSettings.Authority }

Authority是令牌颁发者(Issuer)的地址,并非受众(Audience),这个错误会导致令牌的受众验证失败。正确的配置应该只保留合法的受众:

ValidAudiences = new List<string> { authSettings.Audience }

另外,如果你需要验证颁发者,建议开启ValidateIssuer = true,并通过ValidIssuer指定颁发者地址(通常就是Authority的值),这样能提升令牌验证的安全性。

3. 授权策略或属性配置不匹配

  • 检查API控制器/Action上的[Authorize]属性是否指定了特定的策略、角色或范围,比如[Authorize(Roles = "Admin")]或[Authorize(Policy = "RequireScope")],如果有对应的要求,需要在AddAuthorization时配置对应的策略:
    builder.Services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireScope", policy =>
        {
            policy.RequireClaim("scope", "api://your-audience/access_as_user");
        });
    });
    
  • 确认登录时获取的令牌是否包含API所需的声明、角色或范围。

4. 配置参数一致性检查

确保appsettings.json中MSAuthentication节点的Authority和Audience,与登录流程中使用的配置完全一致:

  • Authority应为Azure AD租户的元数据地址(比如https://login.microsoftonline.com/{tenant-id}/v2.0)
  • Audience应为API的客户端ID或应用ID URI

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:41