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

Azure AD登录应用时获取已分配内置及自定义角色的API咨询

获取用户的Azure AD内置与自定义目录角色的正确Graph API

你提到的/users/{id | userPrincipalName}/appRoleAssignments确实不对,因为这个API返回的是应用角色分配(也就是用户在特定应用中的角色权限),而你需要的是Azure AD层面的目录角色(包括内置和自定义的目录级角色)。

要获取某个用户已分配的所有目录角色(不管是内置还是自定义),应该调用下面的Microsoft Graph API:

GET /users/{id | userPrincipalName}/memberOf/microsoft.graph.directoryRole

为什么这个API适用?

  • memberOf是用户的成员关系集合,默认会返回用户所属的所有组、角色等资源;
  • 通过追加/microsoft.graph.directoryRole进行类型筛选,就能只提取出目录角色类型的成员关系,这样就同时包含了内置角色(比如全局管理员、用户管理员)和你创建的自定义目录角色。

权限要求

你需要为应用或用户分配以下权限之一(根据你的认证方式选择):

  • 委派权限:Directory.Read.All 或 User.Read.All
  • 应用权限:Directory.Read.All

响应示例片段

返回的结果会包含每个角色的详细信息,比如:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryRoles",
  "value": [
    {
      "id": "12345678-1234-1234-1234-1234567890ab",
      "displayName": "全局管理员",
      "description": "有权访问Azure AD中的所有管理功能",
      "roleTemplateId": "62e90394-69f5-4237-9190-012177145e10"
    },
    {
      "id": "87654321-4321-4321-4321-ba0987654321",
      "displayName": "自定义IT支持角色",
      "description": "负责用户密码重置和设备管理",
      "roleTemplateId": "自定义角色的模板ID"
    }
  ]
}

和你提到的directoryRoles/{id}/members的区别

directoryRoles/{id}/members是反向查询——用来查看某个特定目录角色下的所有成员;而你需要的是正向查询:查看某个用户被分配了哪些目录角色,所以memberOf/microsoft.graph.directoryRole才是正确的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:42:49