【问题标题】:How to authorize Azure multi tenant application to provision resources in customer tenant如何授权 Azure 多租户应用程序在客户租户中预配资源
【发布时间】:2021-04-26 02:23:05
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • ClientSecretCredential 使用客户端凭据流。如果您向服务主体添加显式角色分配,您应该能够使用azure.identity.ClientSecretCredential。现在是什么问题?为什么一定要用AuthorizationCodeCredential
  • @AllenWu 因为我们无法控制目标租户(它是客户租户),所以不能使用 ClientSecretCredential。基本上我想自动化客户帐户设置过程,例如创建一些天蓝色资源等。
  • 当然,也许您可​​以使用UsernamePasswordCredential 包含用户令牌和委托权限以列出您想要的信息。但在这种情况下,用户还需要有权访问目标帐户中的订阅/配置资源。也就是说,还需要给用户分配对应的RBAC角色(对应ClientSecretCredential的服务主体)。此外,Microsoft 不推荐使用 UsernamePasswordCredential。
  • 我完全理解您的要求。如果您没有已分配 RBAC 角色的目标租户用户(或企业应用程序(服务主体)),则您无权访问订阅/供应资源,因为缺少权限。即使在他们自己的租户中有应用注册,也需要我提到的 RBAC 操作。
  • 还有另一种方法(另一种设计),您可以使用auth code flow在您的前端应用程序中获取Azure Rest API的访问令牌并将访问令牌发送到您的函数,然后调用Azure Rest API在函数应用中。

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


【解决方案1】:

AuthorizationCodeCredential不适合功能应用,因为根据我的经验,在功能应用中是不可能实现交互登录的。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2017-10-10
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多