【发布时间】:2021-04-26 02:23:05
【问题描述】:
我正在构建一个多租户应用程序,它必须在帐户设置过程中在客户(比如目标)租户中配置一些天蓝色资源(资源组、甚至集线器、存储集线器等)。
我跟着azure doc注册了一个应用。我可以在“企业应用程序”下看到在目标租户中创建的服务主体,并且该应用程序已委托类型“azure 服务管理 API”权限。
问题:
我想在 PYTHON 的源租户(这是我的租户)中编写一个函数应用程序,它可以获取目标帐户中的订阅/配置资源。我尝试azure.identity.ClientSecretCredential 在类似example 的函数中获取订阅列表,它重新调整了 Zero 订阅。我认为 ClientSecretCredential 不适合委托类型权限,直到我向服务主体添加显式角色分配,它才具有授权。 post 也是这么说的。
是否必须使用AuthorizationCodeCredential,但它需要auth_code,需要用户交互。那么,是否需要开发一个提示用户同意的网页,并使用此函数作为重定向 URI 将 auth_code 重定向到此函数?
还有其他方法吗? 任何代码参考都会有所帮助。
另外,MSAL 和 azure.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