【问题标题】:Azure AD Graph API User memberOf nested groupsAzure AD Graph API 用户 memberOf 嵌套组
【发布时间】:2015-01-29 03:18:46
【问题描述】:

我正在向我的 Azure AD 图形 API 查询用户的组成员身份。 我可以很好地进行查询,但结果只是用户直接所属的组。没有列出任何嵌套组。

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

有没有办法在一个 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);

【问题讨论】:

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


    【解决方案1】:

    是的。 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/

    【讨论】:

    • 您的第一个建议对我有用。谢谢你。我们不会直接在 azure 应用程序中分配角色,因为我们的本地 AD 同步到我们的 azure AD,然后我们通过我们的 ADFS 使用 OpenID 对 azure AD 进行身份验证。我们所有的组/角色都在我们的本地 AD 中进行管理。
    • " 您的应用程序可以声明应用程序角色,管理员可以将其分配给用户和组" 这是黄金!为什么应用程序开发人员应该干预某人的 AD 存储桶,检查组并担心传递性等......这是否适用于多租户?,这就是问题......
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2020-12-27
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多