Azure AD Graph API用户成员嵌套组

时间:2015-01-28 18:50:05

标签: c# azure authorization azure-active-directory

我正在查询我的Azure AD图API以获取用户的组成员身份。 我可以使查询很好,但结果只是用户DIRECTLY所属的组。没有列出任何嵌套组。

我试图找出某个用户是否属于某个特定群组,但我不想做出最终可能会发生的事情,超过100个api要求查找。 (即,用户属于GroupA,GroupA是GroupB的成员,GroupC是GroupD的成员.B组,C和D组不显示在用户的组列表中,即使他技术上属于他们 - 只有GroupA)。

有没有办法在一个API调用或另一个API调用中获得所有组成员身份?当我使用集成Windows身份验证时,IsInRole(GroupD)将返回true。但是,Azure AD身份验证不具备这一功能,并声称拥有重新实现IsInRole代码的任何帖子只是对user.memberOf(不执行嵌套组)进行相同的调用。

仅供参考,这是我拨打电话的代码。

var client = AuthenticationHelper.GetActiveDirectoryClient();
var user = await client.Users.GetByObjectId(objectId).ExecuteAsync();
var userFetcher = (IUserFetcher)user;
var pagedCollection = await userFetcher.MemberOf.ExecuteAsync();

do
{
    var directoryObjects = pagedCollection.CurrentPage.ToList();

    foreach (var group in directoryObjects.OfType<Group>().Select(directoryObject => directoryObject))
    {
        groupMembership.Add(group);
    }

    pagedCollection = await pagedCollection.GetNextPageAsync();
}
while (pagedCollection != null && pagedCollection.MorePagesAvailable);

1 个答案:

答案 0 :(得分:4)

是。 getMemberObjects API返回用户所属的所有组(传递):https://msdn.microsoft.com/en-us/library/azure/dn835117.aspx。此外,使用checkMemberGroups API,您可以检查用户是否是组的成员(传递):https://msdn.microsoft.com/en-us/library/azure/dn835107.aspx

但是,根据您的要求,Azure AD的应用程序角色功能可能更适合。您的应用程序可以声明应用程序角色,管理员可以将这些角色分配给用户和组。当用户登录到您的应用程序时,Azure AD会计算已分配给他们的应用程序角色,并将其发送到角色声明中。无需在运行时查询图形。见这里:http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/