我可以看到如何在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'
的资源
答案 0 :(得分:1)
无法在整个租户中查询appRoleAssignment
资源。它需要限定为父资源,user
,servicePrincipal
或group
。
在盒子外面思考,你可能能够在没有预期的开销的情况下编译一个集合。为此,您需要将其存储在AD之外并定期刷新数据集。
如果您通常主要关注user
分配,则可以尝试对/delta
资源列表使用user
次查询。这样您就可以只检索已更改的user
个资源。获得user
后,您就会检索appRoleAssignment
资源并将其存储在外部数据存储中。
对于可能分配给给定用户的潜在appRole
资源列表,您可以通过从租户检索application
资源列表并查看appRoles
来获取此信息。财产(/beta/applications?$select=appRoles
)。
对于近实时更改,您可以使用/beta/users/delta
,然后定期轮询user
和application
个集合,以完全刷新较大的数据集。
请记住,这不是我试图进行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