如何以编程方式注册没有租户 ID 的 Azure AD 应用程序?

How to programatically register an Azure AD application without tenant ID?

我阅读了这些主题,但对答案并不十分满意:

我想我有一个目前不支持的方案。

我们正在构建一个应用程序,用于在数据库中整合有关客户内部部署基础设施 云环境的信息。它还应该收集有关例如Office 365 用户和订阅。这是客户场景:

  1. 下载并安装应用程序预置

  2. 配置数据源(类似于 清单和评估向导 中的 MapToolkit)。此时还要将应用指向 Office 365 订阅。

  3. 运行 将资产信息收集到您的数据库中的应用程序。

他们需要在 Azure AD 中注册该应用程序并为其提供对 Microsoft Graph 的访问权限,以便第 2 步能够正常工作。如果他们的技术足以找到他们的租户 ID,通过 Azure 门户或 PowerShell 注册应用程序,并将 ID 复制到应用程序的配置文件中,这不是问题。但是我无法为不太懂技术的用户简化配置过程。

基本上,我想在已编译的 C# 中做一些今天已经可以使用 PowerShell 实现的事情:以目录管理员身份登录并注册一个应用程序。所以我在这里没有看到安全问题。

我们有一个类似的场景 运行ning 确实有效,我们在 Azure AD 中将应用程序设置为多租户应用程序,并且客户同意在网页上访问他们的 Office 365 订阅。但这不是我们的想法。这是他们的数据,没有理由通过我们的租户运行。

也许我完全忽略了这一点,有一种简单的方法可以实现这一点。但我已经通过 AzureAD 文档和示例筛选了数周,但我没有看到它。感谢任何支持这种情况的帮助或信息。

Azure Active Directory 中的所有对象都位于一个租户中,包括应用程序对象。引用目录中的任何对象时,必须先建立租户上下文,然后才能查询该租户内的数据。我们提供的(据我所知)不存在于顶级租户结构之上。

当你说 "It's their data, there's no reason to run it through our tenant." 我觉得对数据如何从目录流向你的应用程序有一点误解。

所有 OAuth 2 客户端应用程序都需要在某处注册。所有不同的服务提供商都提供某种客户注册流程。 Azure Active Directory 只是利用现有的租户结构来注册应用程序。这也允许许多其他功能,如管理控制、应用程序的用户分配、条件访问策略等...

现在,当您在您的租户中注册一个多租户应用程序时,您实际上只是在为存储您的客户注册信息建立一个家。实际上没有数据进入您的租户,或存储在您的租户中。我们只需引用您租户中的应用程序对象即可了解应用程序的当前配置。

我们会要求使用您的应用程序的用户同意您的应用程序获取该数据。当用户注册使用 AAD 时,Microsoft 向这些用户承诺保护他们的个人和私人数据安全。 (我相信我们使用的法律术语比这多得多,但你明白了。)我们不能在不知道用户可以交出的情况下简单地交出用户的 phone 号码、电子邮件地址等东西数据交给你。您无法绕过同意,而且确实没有办法做到这一点。

但是,随着我们应用程序模型的未来,这些概念正在慢慢改变。在应用程序模型 V2 中,我们允许 AAD 用户或拥有个人帐户的人注册允许 AAD 和个人帐户登录的应用程序。这意味着您可以在没有 AAD 帐户的情况下为上述场景创建和注册应用程序。

在此处了解更多信息: Sign-in Microsoft Account & Azure AD users in a single app

这里作为答案:

您可以在租户中注册多租户应用。

可以授予该应用程序在客户的租户中创建新应用程序的权限。然后,您在客户的 AAD 中有一个新的单租户。

应授予该应用访问您的解决方案需要访问的资源的权限。这就是我们最终的解决方案。

一旦在他们自己的租户中创建了新应用程序,客户就可以撤销对具有 AAD 写入权限的多租户应用程序的访问权限。