使用 Azure AD Graph 客户端获取 Active Directory 管理员
Posted
技术标签:
【中文标题】使用 Azure AD Graph 客户端获取 Active Directory 管理员【英文标题】:Get Active Directory Administrators using Azure AD Graph Client 【发布时间】:2015-10-13 10:32:28 【问题描述】:使用 Azure Active Directory Graph 客户端,我可以使用 ff.代码:
var activeDirectoryClient = new ActiveDirectoryClient(); // Instantiate the Graph Client here.
var adRoles = await activeDirectoryClient.DirectoryRoles.ExecuteAsync();
但是,是否有可能获得:
-
作为管理员角色的角色列表?和
属于管理员角色的用户列表?
在这种情况下,我对管理员的定义是公司管理员角色下的用户,或者能够授权应用程序的用户(通过格式为https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id=xxx-xxx&resource=yyy-yyy&redirect_uri=zzz-zzz&的身份验证请求URLprompt=admin_consent)
【问题讨论】:
【参考方案1】:有几种方法可以做到这一点,让我们以 REST API 为起点。
您可以通过向https://graph.windows.net/myorganization/users/user_id/$links/memberOf?api-version
发出 GET 请求来获取每个 USER 的组和角色列表成功时,返回指向该用户所属的 Group 和 DirectoryRole 的链接集合
参考:Get a user's group and directory role memberships
要获得组的成员资格,您可以向以下地址发出 GET 请求:https://graph.windows.net/myorganization/groups/object_id/$links/members?api-version
参考:Get a group's direct members
但是根据文档:
不得对目录角色调用任何函数或操作
参考:https://msdn.microsoft.com/en-us/Library/Azure/Ad/Graph/api/entity-and-complex-type-reference#DirectoryRoleEntity
这必须从 USER 对象中完成。 SDK 会反映这一点。
IPagedCollection<IDirectoryObject> pagedCollection = retrievedUserFetcher.MemberOf.ExecuteAsync();
GraphAPI 控制台应用程序有一些很好的示例,可以向您展示如何完成这些操作:Program.cs
【讨论】:
感谢@Devian 的输入。我创建了一个测试方法,并且能够验证我的公司管理员有一个Role
对象,当它与活动目录的角色交叉引用时,它与 AD 的“公司管理员”角色相匹配。话虽如此,是否可以保证每个 AD 都将具有此角色,名称为“公司管理员”?我假设角色 ID 会随着每个租户而改变,但如果名称是常数,我不介意使用它进行比较。我很可能必须遍历所有成员以检查他们是否与角色匹配以获取所有 AD 管理员。以上是关于使用 Azure AD Graph 客户端获取 Active Directory 管理员的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式获取 Azure AD 应用程序的 Graph API 权限指南?
使用 Azure AD、ReactJS 和 NodeJS 验证用户并使用 Graph API
如何使 Azure AD access_token 在 Microsoft Graph API 之外对其签名验证兼容?
Azure AD B2C 连接的用户使用 Graph AD API 更改密码