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

如何通过AzureAD REST API按角色统计用户分布?

可以通过Azure AD REST API实现按角色统计用户分布

是的,完全可以通过Azure AD的REST API完成这个需求,不过API本身不支持直接的聚合统计,需要你获取数据后在本地做分组计数。具体步骤如下:

1. 获取目标应用的角色定义

首先调用GET /applications/{application-id}/appRoles接口,拿到该Web应用所有角色的id和对应的显示名称displayName,把它们存成一个映射表(键为角色ID,值为角色名称),方便后续匹配。

2. 查询所有分配了该应用角色的用户

使用GET /users?$expand=appRoleAssignments&$filter=appRoleAssignments/any(r: r/appId eq '{application-id}')接口,获取所有被分配了该应用角色的用户。这个请求会返回每个用户的详细信息,包括他们的应用角色分配记录。

如果用户数量较多,接口会返回分页标记@odata.nextLink,你需要循环调用直到获取所有用户数据。

3. 本地统计角色用户数量

遍历获取到的用户列表,对每个用户的appRoleAssignments进行检查,筛选出属于目标应用的角色分配记录,然后根据之前的映射表把角色ID转换成角色名称,最后按角色名称分组计数,就能得到你想要的结果。

伪代码示例:

// 构建角色ID到名称的映射
appRoles = GET /applications/{your-app-id}/appRoles
roleIdToName = {}
for role in appRoles:
    roleIdToName[role.id] = role.displayName

// 获取所有关联目标应用角色的用户
users = []
nextLink = "https://graph.microsoft.com/v1.0/users?$expand=appRoleAssignments&$filter=appRoleAssignments/any(r: r/appId eq '{your-app-id}')"
while nextLink:
    response = GET nextLink
    users.extend(response.value)
    nextLink = response.get("@odata.nextLink")

// 统计每个角色的用户数
roleCounts = {}
for user in users:
    for assignment in user.appRoleAssignments:
        if assignment.appId == "{your-app-id}":
            roleName = roleIdToName[assignment.roleId]
            roleCounts[roleName] = roleCounts.get(roleName, 0) + 1

// 输出结果
for role, count in roleCounts.items():
    print(f"{role}: {count}")

权限要求

调用这些接口需要对应的权限:

  • User.Read.All:允许读取所有用户的信息
  • Application.Read.All:允许读取应用的角色定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:25:29