我正在尝试构建一个多租户应用程序,以从我的个人帐户中检索所有订阅信息。
使用Powershell ARM我可以检索此信息:
但是,尝试使用azure管理API执行此操作时:
https://management.azure.com/subscriptions?api-version=2016-06-01
使用我的租户生成的JWT,应用程序ID和密钥保密,它返回以下内容:
{“value”:[]}
我的应用程序权限似乎很好:
我是否遗漏了我的权限?
编辑:我能够让我的租户使用相同的端点。这可能与我公司对AAD用户的权限有关吗?
答案 0 :(得分:0)
首先,您使用客户端凭据流。通过此流程,您无法代表用户。 委托权限不适用于此流程,而是代表其他代表用户流程,例如代码授予流程。因此,您需要选择需要使用的流程。如果您仍想使用客户端凭据流,则可以执行以下步骤为其授予权限:
您需要通过Azure RBAC为您的服务主体分配角色。 转到Azure门户>选择一个特定订阅>访问控制(IAM)>添加>选择您的服务主体>选择贡献者角色>保存
您可以采取相同的步骤,从其他订阅中为您的sp添加分配角色。
执行此操作后,您可以拥有足够的权限以通过客户端凭据流使用REST API。
关于来自其他租户的列表订阅:
我没有对此进行测试,因为我没有多次订阅。但是对于多租户APP,它还需要其他租户管理员同意并为其分配角色。
通过客户端凭据流,您仍然只能获得一个租户的访问令牌。因此,您只能列出一个租户的订阅。
即使powershell实际上也会从其他租户那里获得多次来自不同teannt ID的订阅。 因此,您无法使用API直接实现这一目标。
我使用Fiddler捕获带有Powershell的流量运行Get-azureRMsubscriptions:
希望这有帮助!