使用多租户应用程序从Azure租户获取订阅

时间:2018-04-02 06:06:50

标签: azure azure-active-directory azure-resource-manager

我正在尝试构建一个多租户应用程序,以从我的个人帐户中检索所有订阅信息。

使用Powershell ARM我可以检索此信息:

enter image description here

但是,尝试使用azure管理API执行此操作时:

  

https://management.azure.com/subscriptions?api-version=2016-06-01

使用我的租户生成的JWT,应用程序ID和密钥保密,它返回以下内容:

  

{“value”:[]}

我的应用程序权限似乎很好:

enter image description here

我是否遗漏了我的权限?

编辑:我能够让我的租户使用相同的端点。这可能与我公司对AAD用户的权限有关吗?

1 个答案:

答案 0 :(得分:0)

首先,您使用客户端凭据流。通过此流程,您无法代表用户。 委托权限不适用于此流程,而是代表其他代表用户流程,例如代码授予流程。因此,您需要选择需要使用的流程。如果您仍想使用客户端凭据流,则可以执行以下步骤为其授予权限:

您需要通过Azure RBAC为您的服务主体分配角色。 转到Azure门户>选择一个特定订阅>访问控制(IAM)>添加>选择您的服务主体>选择贡献者角色>保存

您可以采取相同的步骤,从其他订阅中为您的sp添加分配角色。

执行此操作后,您可以拥有足够的权限以通过客户端凭据流使用REST API。 enter image description here

关于来自其他租户的列表订阅:

我没有对此进行测试,因为我没有多次订阅。但是对于多租户APP,它还需要其他租户管理员同意并为其分配角色。

通过客户端凭据流,您仍然只能获得一个租户的访问令牌。因此,您只能列出一个租户的订阅。

更新

即使powershell实际上也会从其他租户那里获得多次来自不同teannt ID的订阅。 因此,您无法使用API​​直接实现这一目标。

我使用Fiddler捕获带有Powershell的流量运行Get-azureRMsubscriptions:

enter image description here

希望这有帮助!