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

Angular5+ASP.NET Core API集成Azure AD B2C受众验证失败问题

解决Azure AD B2C令牌受众验证失败问题

这个问题我碰到过好多次,本质就是令牌的受众(Audience)和API验证时配置的有效受众不匹配导致的。咱们一步步来排查和解决:

1. 先检查Angular应用的令牌请求配置

你现在拿到的令牌受众是SPA自己的客户端ID(627684f5-5011-475a-9cbd-55fcdcdf369e),说明Angular请求令牌时,目标资源设成了自己,而不是API。

在Angular的认证配置里(比如app.module.ts或者专门的auth配置文件),找到protectedResourceMap(如果用的是MSAL库),确保你为API端点指定的是API的客户端ID对应的范围:

MsalModule.forRoot({
  auth: {
    clientId: '627684f5-5011-475a-9cbd-55fcdcdf369e', // 这是SPA的客户端ID,没问题
    authority: 'https://yourtenant.b2clogin.com/yourtenant.onmicrosoft.com/B2C_1_signupsignin',
  },
  cache: {
    cacheLocation: 'localStorage',
    storeAuthStateInCookie: isIE,
  }
}, {
  protectedResourceMap: new Map([
    // 这里要把API端点和API的范围对应起来
    ['https://yourapi-domain.com/api', ['https://yourtenant.onmicrosoft.com/ee8b98a0-ae7a-38b2-9e73-d175df22ef4c/access_as_user']]
  ])
})

这里的关键是范围格式:https://{你的租户域名}/{API的客户端ID}/{权限名称},这样请求到的令牌的aud字段才会是API的客户端ID。

2. 确认ASP.NET Core API的验证配置

在API的appsettings.json里,确保AzureAdB2C的ClientId是API自己的客户端ID(ee8b98a0-ae7a-38b2-9e73-d175df22ef4c):

"AzureAdB2C": {
  "Instance": "https://yourtenant.b2clogin.com/",
  "ClientId": "ee8b98a0-ae7a-38b2-9e73-d175df22ef4c",
  "Domain": "yourtenant.onmicrosoft.com",
  "SignUpSignInPolicyId": "B2C_1_signupsignin"
}

然后在Program.cs(或者Startup.cs)的认证配置里,不要手动指定错误的ValidAudience,默认用配置里的ClientId就好:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAdB2C"));

3. 验证令牌内容

你可以在Angular代码里打印出获取到的令牌,解析后查看aud字段,确认它是否变成了API的客户端ID。如果还是SPA的ID,那肯定是Angular的范围配置没改对,再回去检查protectedResourceMap。

4. 检查Azure AD B2C应用注册

  • 登录Azure门户,找到你的API应用注册,确认它的客户端ID确实是ee8b98a0-ae7a-38b2-9e73-d175df22ef4c,并且已经暴露了对应的API权限(比如access_as_user)。
  • 再找到SPA的应用注册,在「API权限」里确认已经添加了这个API的权限,并且已经完成了管理员同意(如果是需要的话)。

调整完这些之后,重新登录Angular应用,拿到新的令牌再调用API,应该就能通过受众验证了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:50:40