.NET Core 6 API客户端凭证认证调用返回401问题排查
.NET Core 6 API Azure AD认证401未授权问题
我尝试在.NET Core 6 API中通过Azure AD的客户端ID和客户端密钥完成认证,调用API端点时始终返回401未授权错误,使用Postman携带获取到的访问令牌请求也得到同样结果。已完成Azure应用注册并成功获取令牌,但认证始终不通过。
我的API认证配置代码
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(jwtBearerOptions => { }, msIdentityOptions => { configuration.Bind("AzureAd", optionsB); var defaultBackChannel = new HttpClient(); defaultBackChannel.DefaultRequestHeaders.Add("Origin", "shard-manager"); msIdentityOptions.Backchannel = defaultBackChannel; }) .EnableTokenAcquisitionToCallDownstreamApi(e => { }) .AddInMemoryTokenCaches();
相关截图
Azure应用注册截图


Postman请求截图

可能的问题排查点
- 配置绑定错误:代码中
configuration.Bind("AzureAd", optionsB)里的optionsB变量未定义,应该替换为msIdentityOptions,否则Azure AD的配置参数(如租户ID、客户端ID)无法正确绑定,导致认证逻辑缺失关键信息。 - 令牌受众不匹配:解码获取到的访问令牌,检查
aud字段是否与API应用注册的客户端ID一致。获取令牌时的scope必须是API的专属范围(如api://{API客户端ID}/.default),如果scope指向其他资源,API会判定令牌无效。 - API权限未配置完整:确保用于获取令牌的客户端应用,已在Azure AD中添加API应用的权限,并且完成了管理员同意操作。
- 中间件顺序错误:在
Program.cs中,app.UseAuthentication()必须放在app.UseAuthorization()之前,否则请求会先进入授权逻辑,此时还未完成认证,直接返回401。 - 租户信息配置错误:检查
appsettings.json中的AzureAd配置,确认TenantId与应用注册的租户ID一致,避免因租户不匹配导致令牌签名验证失败。
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

