首页 > 解决方案 > 如何使用单个应用程序访问 Azure AD 中多个租户的资源?

问题描述

我的客户端应用程序(托管在不在 Azure 上的 Web 服务器上)需要访问各种组织的 Azure 存储帐户。

假设有三个组织 - Org1、Org2 和 Org3。对于这 3 个组织中的每一个,我都会在我的服务器上运行我的应用程序的一个实例,所以基本上它们是独立的实例。将有一个基于 UI 的表单供组织输入其详细信息(如订阅 ID、存储帐户名称等)。

我的印象是我有两个选择。

选项 A - 在每个组织中创建应用注册。因此将创建 3 个应用程序(每个组织的租户中一个)。每个组织都必须为其各自应用程序的服务主体赋予一个角色,以便能够访问其存储帐户。所以总共有 3 个应用程序和 3 个服务主体。

选项 B - 在我的组织(租户)中创建应用注册。为了便于理解,我们称其为 SomanshOrg。我们能否在 Org 1、Org2、Org3 中创建服务主体,每个组织都必须为其各自应用程序的服务主体赋予一个角色,以便能够访问其存储帐户。然后从我的客户端应用程序中,我将能够访问他们的资源。所以总共有 1 个应用程序和 4 个服务主体(3 个 Org + mine)。

最终目标是仅在初始 UI 表单中从用户那里获取凭据。然后我们可以在没有更多用户参与的情况下访问他们的 Azure 存储。

这些选项中哪一个会更好?还是其他选项更适合我的用例?

标签: azureazure-active-directoryazure-storageazure-blob-storageazure-authentication

解决方案


这些选项中哪一个会更好?还是其他选项更适合我的用例?

选项B更好,我认为这应该是这种情况下最合适的方式。

您只需要在 SomanshOrg 中创建一个多租户应用程序,然后使用 Org1、Org2、Org3 各自的管理员帐户来同意相应租户的应用程序。

同意后,服务主体将位于各自的租户中,然后您只需在存储帐户范围内为其添加RBAC 角色

最后一步是访问存储帐户,如果您想在没有任何用户参与的情况下执行此操作,只需使用客户端凭据流获取访问存储帐户的令牌即可。选项 B 的优点是我们只需要一个应用程序 ID 和一个客户端密码(在 SomanshOrg 中创建),该密码可用于应用程序的所有服务主体。


推荐阅读