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

How to authorize Azure multi tenant application to provision resources in customer tenant

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

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

问题: 我想在 PYTHON 中的源租户(这是我的租户)中编写一个函数应用程序,它可以在目标帐户中获取 subscriptions/provision 资源。我在函数中尝试了 azure.identity.ClientSecretCredential,类似 example to fetch list of subscriptions , it retuned Zero subscriptions . I think ClientSecretCredential doesn't fit for delegated type permission, until i add explicit role-assignment to the service principal , it wont have authorization . 的意思是一样的。

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

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

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

AuthorizationCodeCredential不适合函数应用,因为根据我的经验,函数应用无法实现交互式登录

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

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

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

您可以从 this post 了解 MSALazure.identity 包之间的区别。