使用 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 更改密码

具有 Azure AD 身份验证的 Azure 函数 - 允许的令牌受众不适用于 Microsoft Graph

Azure AD Graph 调用用户创建失败并出现一些模糊的错误