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

时间:2017-04-29 14:52:25

标签: c# automation azure-active-directory adal azure-ad-graph-api

我读过这些帖子,但对答案并不满意:

我认为我的方案当前不受支持。

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

  1. 下载并安装应用内部部署

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

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

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

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

    我们运行的类似方案确实有效,我们将应用程序设置为Azure AD中的多租户应用程序,客户同意在网页上访问其Office 365订阅。但那不是主意。这是他们的数据,没有理由通过我们的租户来运行它。

    也许我完全忽略了这一点,并且有一种简单的方法来实现它。但我现在已经通过AzureAD doc和样品进行了数周筛选,但我没有看到它。感谢您提供支持此方案的任何帮助或信息。

2 个答案:

答案 0 :(得分:1)

这里作为答案:

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

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

应该授予该应用程序访问您的解决方案需要访问的资源的权限。这就是我们为解决方案而努力的结果。

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

答案 1 :(得分:0)

Azure Active Directory中的所有对象都位于租户中,包括应用程序对象。在引用目录中的任何对象时,必须首先建立租户上下文,然后允许您查询该租户中的数据。我们提供的(我知道)没有任何东西存在于顶层租户结构之上。

当您说“他们的数据”时,没有理由通过我们的租户运行它。"我觉得对数据如何从目录流向您的应用程序存在轻微的误解。

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

现在,当您在租户中注册多租户应用程序时,您实际上只是在建立客户注册存储位置。实际上没有任何数据可以进入您的租户,或存储在您的租户中。我们只需在您的租户中引用Application Object即可了解应用程序的当前配置。

我们会要求使用您的应用程序的用户同意您的应用获取该数据。当用户注册使用AAD时,Microsoft会向这些用户承诺保护其个人和私人数据的安全。 (我相信我们使用的法律条款远不止于此,但你明白了。)我们不能简单地交出用户电话号码,电子邮件地址等内容,而不必事先知道用户是否可以提供数据给你。你没有办法绕过同意,而且真的不应该这样做。

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

点击此处了解详情: Sign-in Microsoft Account & Azure AD users in a single app