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

如何获取Azure AD用户关联的Azure订阅?Microsoft Graph API遇阻

嘿,我懂你现在的处境——本来想着用Microsoft Graph API直接拉Azure AD用户关联的Azure订阅,结果发现Graph里根本找不到对应的端点对吧?这其实是因为订阅属于Azure资源管理(ARM)的范畴,Graph的核心是管Azure AD相关的身份、组织数据,所以得换个思路,结合ARM API来实现。下面给你几个靠谱的方案:

方案1:用用户的权限上下文直接调用ARM订阅列表API

这是最直接的方式——如果用户本身有订阅的访问权限(比如Reader/Owner/Contributor角色),你可以获取用户的ARM访问令牌,然后调用ARM的订阅查询端点,返回的就是该用户能访问的所有订阅。

  • 步骤:
    1. 获取用户的ARM令牌:和获取Graph令牌的OAuth流程一样,只是把scope改成https://management.azure.com/.default。如果用Azure CLI的话,直接运行az account get-access-token --resource https://management.azure.com就能拿到。
    2. 调用API:发送GET请求到https://management.azure.com/subscriptions?api-version=2020-01-01,带上Authorization头(Bearer + 令牌)。
  • 示例curl命令:
curl -X GET "https://management.azure.com/subscriptions?api-version=2020-01-01" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6..."
  • 注意:这个API返回的订阅列表完全基于当前用户的权限,用户没权限的订阅不会出现在结果里。
方案2:查询订阅的RBAC角色分配来关联用户

如果需要更精准地找到用户直接或间接(通过AD组)关联的订阅,可以遍历租户内的所有订阅,查询每个订阅的角色分配,筛选出和目标用户相关的条目。

  • 步骤:
    1. 先获取租户内的所有订阅(需要有租户级Reader权限的账号来做这个):调用GET /subscriptions?api-version=2020-01-01。
    2. 对每个订阅,调用角色分配API:GET /subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01。
    3. 在返回的角色分配中,筛选出principalId等于目标用户的ObjectID,或者principalId属于用户所在AD组的条目,对应的订阅就是用户关联的。
  • 提示:如果要处理组继承的情况,需要先通过Graph API获取用户的所有所属组(GET /users/{userId}/memberOf),然后再去匹配角色分配里的组ID。
关键注意事项
  • Microsoft Graph API本身没有专门的端点返回Azure订阅数据,所以必须依赖ARM API来实现。
  • 确保用来查询的账号有足够的权限:如果是查单个用户能访问的订阅,用该用户的令牌即可;如果是批量查询租户内所有用户的订阅关联,需要用有租户级权限的服务账号。
  • 处理间接权限:用户可能通过AD组、管理组等方式获得订阅权限,这些情况需要额外的步骤去递归验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:58:59