如何使用单个应用程序访问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存储。

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

解决方法

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

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

您只需要在SomanshOrg中创建一个multi-tenant app,然后将Org1,Org2,Org3的相应管理员帐户分别用于consent the app即可。

同意后,服务负责人将位于各自的租户中,然后您只需在存储帐户范围内为其添加RBAC roles

最后一步是访问存储帐户,如果要在没有任何用户参与的情况下执行此操作,只需使用client credential flow获取令牌即可访问存储帐户。选项B的优点是我们只需要一个应用程序ID和一个客户机密(create it in the SomanshOrg),该机密可用于该应用程序的所有服务主体。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...