如何列出Microsoft Graph API或Azure AD Graph API中的所有appRoleAssignments

时间:2017-10-18 12:01:58

标签: microsoft-graph azure-ad-graph-api

我可以看到如何在AAD Graph中查询给定用户的appRoleAssignments:

https://graph.windows.net/{my-tenant}/users/{user-guid}/appRoleAssignments

但是我找不到一种方法来检索域内的所有appRoleAssignments。我的用例是Power BI(报告工具),虽然我可以获取所有应用程序,所有用户,然后按用户运行查询,但鉴于成千上万的用户和应用程序,这将非常昂贵。

理想情况下,我会检索所有应用(检查),所有用户(检查)和所有appRoleAssignments以链接它们(此问题)。

试过这个:     https://graph.microsoft.com/beta/appRoleAssignments

但回去:

  

不支持对此资源类型的直接查询。

试过这个:     https://graph.windows.net/ {租户} / appRoleAssignments

但是得到这个:

  

找不到段'appRoleAssignments'

的资源

3 个答案:

答案 0 :(得分:1)

无法在整个租户中查询appRoleAssignment资源。它需要限定为父资源,userservicePrincipalgroup

在盒子外面思考,你可能能够在没有预期的开销的情况下编译一个集合。为此,您需要将其存储在AD之外并定期刷新数据集。

如果您通常主要关注user分配,则可以尝试对/delta资源列表使用user次查询。这样您就可以只检索已更改的user个资源。获得user后,您就会检索appRoleAssignment资源并将其存储在外部数据存储中。

对于可能分配给给定用户的潜在appRole资源列表,您可以通过从租户检索application资源列表并查看appRoles来获取此信息。财产(/beta/applications?$select=appRoles)。

对于近实时更改,您可以使用/beta/users/delta,然后定期轮询userapplication个集合,以完全刷新较大的数据集。

请记住,这不是我试图进行POC的事情,因此可能存在我不考虑的问题。它完全在/beta端点内,这意味着API行为和数据集可以随时更改而不会发出警告。 那说,这是一个非常有趣的思想驱逐。我很想知道你最终会在哪里结束这件事。

为了澄清任何可能在搜索中表现出来的人,Azure AD Graph和Microsoft Graph是两个独立的API和用户不同的权限范围和语法。通常,开发人员应尽可能使用Microsoft Graph,因为它最终将取代旧的Azure AD Graph。

答案 1 :(得分:0)

这对我有用......(经典图表)

 https://graph.windows.net/{tenant-id-AsGuid-NoBraces}/users/{UserId-AsGuid-NoBraces}/appRoleAssignments?api-version=1.6 

响应将在用户上下文中 - 因此用户将成为principalID。

应用程序ID将位于resourceID中 - 这不是应用程序ID。这是app注册所指向的objectId。

(关于您的情况的评论) 关于尝试获取所有列表的一般困境"通过查询所有用户看起来像一个真正的问题。我通过使用已知列表避免了这种情况。我选择使用已知列表的原因是我们的环境中有许多其他应用程序,我的应用程序没有通过代码列出或操作的知识或操作权限。我只针对已知的应用注册目标列表及其底层对象ID。所以这就是我避免你的一般困境的方法。

Azure门户(在我的情况下)向我展示了我需要了解的有关添加到我的应用特定注册列表的基础ID。

这个API可能适合你 - 我选择不使用它 - 但我不记得为什么。

https://graph.windows.net/{tenant-id-AsGuid-NoBraces}/servicePrincipals/{AppOBJECTID-AsGuid-NoBraces}/appRolesAssignedTo?api-version=1.6

答案 2 :(得分:0)

我无法支持或标记答案,我认为这样做的声誉太低。 无论如何,非常感谢Marc Lafleur让我朝着正确的方向前进。 似乎没有办法单独检索应用程序/用户列表,但是在/ users调用Azure Graph API上扩展appRoleAssignments就可以了。请注意,使用较新的Microsoft Graph API似乎没有类似的方法:(

这就是为我开启魔术的电话:

https://graph.windows.net/my-tenant/users?$expand=appRoleAssignments