查询来自不同Azure租户的用户

时间:2019-03-21 12:49:32

标签: azure microsoft-graph

在某些情况下,我们有“客户”。每个客户端都是一个不同的Azure租户,但是我们将其租户ID保留在数据库中。因此,我们有了Angular应用程序,我们希望其中的所有客户端都有一个下拉菜单,并根据选定的客户端来查询其租户用户,以便我们可以将其添加到我们的数据库中,并向他们提供权限和其他所有应用程序的填充。根据我的阅读,这是无法实现的, enter image description here

因为只有3-4位租户的人才能使用此许可申请。

有没有办法实现这一目标?

1 个答案:

答案 0 :(得分:2)

您将需要使用User.Read.All Application permissions并使用Client Credentials授权进行身份验证。然后,您需要在调用/v1.0/users之前从每个租户中检索令牌。

请注意,这需要从您要查询的每个租户处获得管理同意书。


罗希特(Rohit)在下面的评论是一个很好的观点。如果您的应用程序是SPA,则意味着授权完全通过Javascript在浏览器中进行,那么您实际上仅限于OAuth的Implicit Grant

要使用Client CredentialsAuthorization Code授予,您需要某种后端API来处理身份验证和对经过身份验证的API的调用。我认为无论如何,除非强迫用户每小时重新进行身份验证并不是很好的用户体验,否则您还是应该这样做。

如果您不介意要求租户中的每个用户进行身份验证,则可以使用授权码授予。设置起来有点复杂,因为它要求您跟踪每个用户的单独刷新令牌。您的后端需要检索刷新令牌,将其交换为一组新令牌(access_tokenrefresh_token),存储新的刷新令牌,然后使用新的访问令牌调用API。

由于令牌与用户之间存在1:1的关系,因此从规模上看,您正在研究很多令牌。您还需要一堆维护工作流程来处理可能出现的问题(刷新令牌失败,新的作用域要求等)。

这实际上取决于您的应用程序与租户之间的关系。如果您要为整个组织提供安全性和分析,那么要求全局Mail.Read当然是合理的。如果您仅向组织的一部分提供服务,则很难让IT部门在如此广泛的许可范围内进行签名。