如何在Azure AD中使用单个应用程序访问多个租户的资源?

How to use a single application to access resources in multiple tenants in Azure AD?

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

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

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

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

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

最终目标是仅从初始 UI 形式的用户处获取凭据。然后我们可以在没有任何用户参与的情况下访问他们的 Azure 存储。

以下哪个选项更好?还是其他选项更适合我的用例?

Which of these options would be better? Or is a different option more suitable for my use case?

方案B更好,我觉得应该是最适合这种情况的方式。

您只需要为各自的租户创建一个multi-tenant app in the SomanshOrg, then use the respective admin accounts of the Org1, Org2, Org3 to consent the app

同意后,服务主体将定位到各自的租户,那么您只需在存储帐户范围内为其添加RBAC roles即可。

最后一步是访问存储帐户,如果您想在没有任何用户参与的情况下执行此操作,只需使用 client credential flow to get the token to access the storage accounts. The advantage of option B is that we just need one application ID and one client secret(create it in the SomanshOrg),该秘密可用于应用程序的所有服务主体。