如何授权 Azure 多租户应用程序在客户租户中预配资源

时间:2021-04-26 02:23:05

标签: python azure azure-active-directory azure-functions azure-authentication

我正在构建一个多租户应用程序,它必须在帐户设置过程中在客户(例如目标)租户中配置少量 Azure 资源(资源组、甚至集线器、存储集线器等)。

我按照 azure doc 注册了一个应用程序。我可以在“企业应用程序”下看到在目标租户中创建的服务主体,并且此应用程序已委托类型“azure 服务管理 API”权限。 Application in target tenant

问题: 我想在 PYTHON 的源租户(这是我的租户)中编写一个函数应用程序,它可以获取目标帐户中的订阅/配置资源。我尝试在 example 之类的函数中使用 azure.identity.ClientSecretCredential 来获取订阅列表,它重新调整了订阅。我认为 ClientSecretCredential 不适合委托类型权限,除非我向服务主体添加显式角色分配,否则它不会获得授权。 post 也一样。

是否必须使用 AuthorizationCodeCredential ,但它需要 auth_code 需要用户交互。那么,需要开发一个网页,提示用户同意并使用此函数作为重定向 URI 将 auth_code 重定向到此函数吗?

还有别的办法吗? 任何代码参考都会有所帮助。

另外,MSALazure.identity 包类有什么区别。关于这方面的任何文档,何时使用哪个 API,我已经看到使用其中任何一个的各种示例。

1 个答案:

答案 0 :(得分:1)

app:boxStrokeColor="@color/xml_just_create" 不适合函数应用,因为根据我的经验,无法在函数应用中实现交互式登录。

也许你可以使用UsernamePasswordCredential,可能没有必要分配RBAC角色。添加委派权限就足够了。无论如何,使用 AuthorizationCodeCredential(在这种情况下需要将 RBAC 角色分配给服务主体/企业应用程序)或 ClientSecretCredential 应该没问题。

简而言之,如果您想使用用户令牌(UsernamePasswordCredentialAuthorizationCodeCredential)调用 Azure Rest API,您需要知道(或输入)目标租户用户的凭据。

其他设计:您可以在前端应用中使用 auth code flow 获取 Azure Rest API 的访问令牌并将访问令牌发送到您的函数,然后在函数应用中调用 Azure Rest API。

您可以从 this post 了解 UsernamePasswordCredentialMSAL 包之间的区别。