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

Angular 5应用查询Azure AD应用角色与组声明的问题

解决Azure AD B2C + Angular 5中获取用户/组数据的问题

我来帮你梳理下你遇到的核心问题和具体解决步骤——你现在的困境主要是混淆了Azure AD B2C与普通Azure AD的数据源边界,同时在权限类型、API端点选择上踩了几个常见的坑:

核心问题拆解

  1. 数据源隔离:Azure AD B2C的用户、组是独立于你的主Azure AD租户的,你用B2C应用登录获取的用户委托令牌,默认只能访问当前登录用户的个人信息,根本没有权限读取租户内的所有用户/组。
  2. 应用类型选错:apps.dev.microsoft.com注册的是个人Microsoft应用,完全不适合Azure AD B2C这种企业级的用户管理场景。
  3. 权限类型错误:你之前尝试的都是用户委托权限,但要获取全租户的用户/组,必须用应用权限(而非用户登录时的委托权限)。

具体解决步骤

1. 注册正确的Azure AD应用

别再用B2C应用或个人Microsoft应用了,去你的主Azure AD租户(不是B2C的用户流界面)注册一个专门用于数据访问的应用:

  • 打开Azure门户 → 进入「Azure Active Directory」→ 「应用注册」→ 「新建注册」。
  • 填写应用名称,账户类型选「仅此组织目录中的账户」(对应你的B2C租户所在的Azure AD目录)。

2. 配置Microsoft Graph应用权限

这个新应用需要申请应用权限才能读取B2C租户的所有用户和组:

  • 进入应用的「API权限」页面 → 「添加权限」→ 选「Microsoft Graph」→ 切换到「应用权限」标签。
  • 勾选你需要的权限:
    • User.Read.All:读取所有用户信息
    • Group.Read.All:读取所有组信息
  • 点击「授予管理员同意」(必须由租户管理员操作,否则权限不会生效)。

3. 获取应用权限令牌(注意:别在前端暴露密钥!)

因为是应用权限,不能用用户登录的方式拿令牌,得用客户端ID+客户端密钥(或证书)走客户端凭据流。建议你在后端服务里实现这个逻辑,前端调用后端接口来获取数据,避免在浏览器里暴露敏感的客户端密钥:

POST https://login.microsoftonline.com/{你的B2C租户ID}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id={你的应用客户端ID}
&scope=https://graph.microsoft.com/.default
&client_secret={你的应用客户端密钥}
&grant_type=client_credentials

4. 调用正确的Microsoft Graph端点

拿到令牌后,就可以调用标准的Microsoft Graph端点获取数据了:

  • 获取所有用户:GET https://graph.microsoft.com/v1.0/users
  • 获取所有组:GET https://graph.microsoft.com/v1.0/groups

提示:不管你有多少个B2C用户流,所有用户数据都会统一在这些端点下返回。

5. 可选:登录时直接获取组/角色声明

如果不想每次都调用Graph,希望用户登录后ID令牌里直接带组或应用角色信息,可以这么做:

  • 组声明配置:进入B2C租户 → 「用户流」→ 选中你的登录/注册流 → 「用户属性」添加「组」,再到「应用程序声明」里勾选「组」,选择返回组ID或名称。
  • 应用角色配置:在B2C应用注册里添加应用角色,把用户/组分配到对应角色,再在用户流里配置应用角色声明,这样登录后令牌里就会包含角色信息。

避坑提醒

  • 别用B2C应用的客户端ID申请应用权限:B2C应用是给用户登录用的,不支持应用权限模式。
  • 彻底放弃graph.windows.net:这个旧端点已经被弃用了,所有Azure AD/B2C操作都要迁移到Microsoft Graph。
  • Graph Explorer测试注意:默认是用用户委托权限,只能看到当前用户;要测试应用权限,得在Graph Explorer里切换到应用权限模式,用你刚注册的应用凭据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:53