在 Azure 中将单租户应用程序转换为多租户应用程序

Convert SingleTenant to Multitenant application in Azure

我有一个以守护进程模式[无接口]运行的客户端应用程序。 这个守护进程将与在 Azure 中创建的应用程序(目前是单租户)对话,以使用 O365 Graph API 获取用户。 使用的身份验证机制是 Auth2 certificate/thumbprint。 在 Azure 中创建应用程序时,管理员直接授予应用程序权限。

现在我需要在 azure 中将此守护程序(客户端)和应用程序设置为多租户。 阅读一些文章后我关注的事情

  1. 在 Azure 中将应用标记为多租户
  2. 指向客户端(作为守护进程运行)中令牌 url 中的 /common https://login.microsoftonline.com/common/oauth2/token

问题:

  1. 在此之后我能够获得访问令牌,但是对于我进行的任何查询我都收到错误 "The identity of the calling application could not be established"。

  2. 由于这里没有用户干预,我如何允许租户 B 应用程序像我的用户一样访问租户 A 的数据?我可以在清单文件中做的任何事情

  3. 如果租户 B 的应用正在访问租户 A 的数据,那么 Azure 中的两个应用都应该是多租户的吗?

很多文章解释了如何基于用户登录(用户同意)的流程。但是我的客户端应用程序作为守护进程运行。我如何在 azure 应用程序中授予 directly/mechanism 访问其他租户数据的权限? [假设我是两个租户的管理员并且我可以完全访问两个租户]

  1. 使用 client_credentials 流程登录到 \OAuth2\token 端点时,无法使用公共端点。这是因为 common 旨在识别用户的 "home" 目录,并且当他们以交互方式登录时,除非被覆盖,否则他们将被重定向以登录到他们的主目录。

2 & 3. 租户 B 没有获得注册应用程序,它只获得了企业应用程序。链接的已注册应用程序将是租户 A,此处的通信不是双向的。 A 在 A 中有一个企业应用程序,在 B 中有一个企业应用程序。您使用 A 中的注册应用程序为所有企业应用程序设置权限,但是 Admin/User - 取决于权限类型 - 必须在其权限中授予权限各自的租户(A&B)。当您以用户身份登录时,您使用应用程序注册。为了访问 B,您必须调用包含 B 的租户 ID 的令牌端点。

要使一个应用程序能够访问多个租户,您需要:

  1. make the Application Multi-Tenanted。记下应用程序的 ApplicationId。
  2. 使用 PowerShell 登录您要授予应用程序访问权限的租户。
  3. 使用 Cmdlet New-AzureRmServicePrincipal -ApplicationId <ApplicationId> 其中是您之前记下的那个。

这将基于租户 A 中的应用程序在租户 B 中创建服务主体。A 中的应用程序随后可以使用租户 B 的令牌端点登录访问。