从.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
相关产品推荐
相关产品推荐

