.NET Core 3.1对接Azure ADB2C调用API报invalid_token受众无效错误
报错根因
该错误本质是API端的JWT验证逻辑预期的受众值与令牌实际携带的aud声明不匹配,即使手动核对两个值字面完全一致,仍有几个隐性配置问题会触发该报错:
- Microsoft.Identity.Web库针对Azure AD B2C场景的默认校验规则和普通Azure AD不同,未显式配置B2C属性时,库会自动给预期受众添加
api://前缀,和B2C颁发令牌中纯GUID格式的aud声明不匹配。 - 部分版本的库存在报错信息模糊问题,令牌颁发者(iss)校验失败时也会返回受众无效的错误提示。
- API端配置未显式指定ValidAudience参数,库默认读取的ClientId参数存在前后缀或值错误,导致校验不通过。
排查解决步骤
- 核对API端配置文件appsettings.json的AzureAd节点,确保包含以下正确配置,Audience字段直接填写令牌中aud声明的纯GUID值,不要添加任何前缀:
"AzureAd": { "Instance": "https://<你的B2C租户名>.b2clogin.com/", "ClientId": "<API注册的客户端ID>", "Domain": "<B2C租户域名,如xxx.onmicrosoft.com>", "TenantId": "<B2C租户ID>", "SignUpSignInPolicyId": "<使用的用户流名称,如B2C_1_signinsignup>", "Audience": "<令牌中aud声明的对应值,即API的客户端ID>" }
- 修改API端Startup的认证配置,显式指定校验规则,避免默认规则的自动拼接逻辑:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(jwtOptions => { Configuration.Bind("AzureAd", jwtOptions); jwtOptions.TokenValidationParameters.ValidAudience = Configuration["AzureAd:Audience"]; // 测试阶段可临时关闭受众校验定位问题,生产环境务必开启 // jwtOptions.TokenValidationParameters.ValidateAudience = false; }, msIdentityOptions => { Configuration.Bind("AzureAd", msIdentityOptions); });
- 核对调用端的Scope配置,确保请求下游API的Scope为B2C标准格式:
https://<B2C租户域名>/<API客户端ID>/<Scope名称>,不要使用普通Azure AD的api://前缀格式Scope。 - 确认令牌颁发策略和API端配置的用户流/自定义策略一致,不同策略颁发的令牌issuer值不同,也会触发该类报错。
内容的提问来源于stack exchange,提问作者David Onyango
相关产品推荐
相关产品推荐

