Azure AD服务间认证场景下.NET 5 API报IDX10214受众验证失败
问题解决步骤
这个报错是JWT令牌的受众校验逻辑未匹配到令牌中携带的aud值导致的,按以下步骤排查配置即可解决:
1. 补充appsettings.json的Audience配置
在AzureAd配置节点新增Audience字段,值为你解码令牌得到的aud值:
"AzureAd": { "ClientId": "<MY_API_APP_ID>", "Instance": "https://login.microsoftonline.com/", "TenantId": "<MY_TENANT_ID>", "Audience": "api://<MY_API_APP_ID>" }
2. 显式配置受众校验规则(可选,配置完第一步仍报错时使用)
如果补充Audience配置后仍有报错,可显式指定允许的受众列表,同时可开启PII显示方便后续排查具体校验不匹配的原因:
首先在ConfigureServices方法最顶部开启PII显示:
IdentityModelEventSource.ShowPII = true;
然后修改身份认证配置:
services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(jwtOptions => { Configuration.Bind("AzureAd", jwtOptions); // 同时允许带api://前缀和不带前缀的两种受众格式 jwtOptions.TokenValidationParameters.ValidAudiences = new List<string> { "api://<MY_API_APP_ID>", "<MY_API_APP_ID>" }; }, identityOptions => Configuration.Bind("AzureAd", identityOptions));
3. 校验API应用注册的令牌版本配置
进入Azure Portal找到你的API应用注册,打开「清单」页面,确认accessTokenAcceptedVersion属性的值为2,如果为null或1则修改为2后保存,等待2-3分钟配置生效后再测试。
4. 服务到服务场景额外配置
你使用应用角色实现权限管控,身份认证通过后还需要校验令牌中的角色信息,在控制器或接口上的[Authorize]属性中指定允许的角色即可:
// 替换为你在API应用注册中定义的应用角色值 [Authorize(Roles = "AccessMyApi")] [ApiController] [Route("api/[controller]")] public class YourController : ControllerBase { // 接口逻辑 }
内容的提问来源于stack exchange,提问作者olivier
相关产品推荐
相关产品推荐

