C# Azure AD Graph API嵌套组的用户成员

C# Azure AD Graph API嵌套组的用户成员,c#,azure,authorization,azure-active-directory,C#,Azure,Authorization,Azure Active Directory,我正在查询Azure AD graph API以获取用户的组成员资格。 我可以很好地进行查询,但结果只是用户直接属于的组。未列出任何嵌套组 我正试图找出一个用户是否属于某个特定的组,但我不想通过100多个api调用来找到答案。(即,用户属于GroupA,GroupA是GroupB的成员,GroupB是GroupC的成员,GroupC是GroupD的成员。组B、C和D不会出现在用户的组列表中,即使他在技术上属于这些组-仅限GroupA) 有没有办法在一个API调用或另一个API调用中获取所有组成员

我正在查询Azure AD graph API以获取用户的组成员资格。 我可以很好地进行查询,但结果只是用户直接属于的组。未列出任何嵌套组

我正试图找出一个用户是否属于某个特定的组,但我不想通过100多个api调用来找到答案。(即,用户属于GroupA,GroupA是GroupB的成员,GroupB是GroupC的成员,GroupC是GroupD的成员。组B、C和D不会出现在用户的组列表中,即使他在技术上属于这些组-仅限GroupA)

有没有办法在一个API调用或另一个API调用中获取所有组成员身份?当我使用集成Windows身份验证时,IsInRole(GroupD)会返回true。不过,Azure AD authentication不提供这种功能,任何声称拥有代码来重新实现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);
var client=AuthenticationHelper.GetActiveDirectoryClient();
var user=await client.Users.GetByObjectId(objectId.ExecuteAsync();
var userFetcher=(IUserFetcher)user;
var pagedCollection=await userFetcher.MemberOf.ExecuteAsync();
做
{
var directoryObjects=pagedCollection.CurrentPage.ToList();
foreach(directoryObjects.OfType()中的变量组。选择(directoryObject=>directoryObject))
{
groupMembership.Add(组);
}
pagedCollection=等待pagedCollection.GetNextPageAsync();
}
while(pagedCollection!=null&&pagedCollection.moresPagesAvailable);

是。getMemberObjects API返回用户所属的所有组(可传递的):。此外,使用checkMemberGroups API,您可以检查用户是否为组成员(可传递):


但是,根据您的需求,Azure AD的应用程序角色功能可能更适合您。您的应用程序可以声明应用程序角色,管理员可以将这些角色分配给用户和组。当用户登录到您的应用程序时,Azure AD计算已分配给他们的应用程序角色,并在角色声明中发送这些角色。不需要在运行时查询图形。请参见此处:

是。getMemberObjects API返回用户所属的所有组(可传递的):。此外,使用checkMemberGroups API,您可以检查用户是否为组成员(可传递):


但是,根据您的需求,Azure AD的应用程序角色功能可能更适合您。您的应用程序可以声明应用程序角色,管理员可以将这些角色分配给用户和组。当用户登录到您的应用程序时,Azure AD计算已分配给他们的应用程序角色,并在角色声明中发送这些角色。不需要在运行时查询图形。请参见此处:

您的第一个建议对我很有用。非常感谢。我们没有在azure应用程序中直接分配角色,因为我们的预付费广告同步到azure广告,然后我们通过我们的ADF使用OpenID对azure广告进行身份验证。我们的所有组/角色都在我们的on-prem AD中进行管理。“您的应用程序可以声明应用程序角色,管理员可以将其分配给用户和组。”这是黄金!为什么应用程序开发人员要插手别人的广告,检查群组,担心传递性等等。。。这在多租户中有效吗?这是个问题。你的第一个建议对我很有效。非常感谢。我们没有在azure应用程序中直接分配角色,因为我们的预付费广告同步到azure广告,然后我们通过我们的ADF使用OpenID对azure广告进行身份验证。我们的所有组/角色都在我们的on-prem AD中进行管理。“您的应用程序可以声明应用程序角色,管理员可以将其分配给用户和组。”这是黄金!为什么应用程序开发人员要插手别人的广告,检查群组,担心传递性等等。。。这是否适用于多租户?这是个问题。。