问题描述
PowerShell 脚本调用Azure REST API, 但是所有的API都需要进行权限验证。要在请求的Header部分带上Authorization参数,并用来对List Resource Group接口进行授权,然后显示Resource Group的Name,Location,和ID ...
问题解答
第一步:在Azure AD中注册应用,该应用表示执行PowerShell Script的客户端拥有访问Subscription下资源的权限。如无,则会出现 AuthorizationFailed 错误,详见附录一:权限问题
在浏览器上的新标签页中打开 Azure 门户。
导航到“应用注册”以在 Active Directory 中注册应用。
选择“新注册”。 在“注册应用程序”页上,将值设置如下:
- 将“名称”设置为一个有意义的名称。 例如,powershell-client
- 将“支持的帐户类型”设置为“仅限此组织目录中的帐户”。
- 选择“注册” 。
注册应用程序之后,从“概述”页复制“应用程序(客户端) ID” 和 “ 目录 ”。
在边侧菜单的“管理”部分下,选择“证书和机密” 。
在“证书和机密”页中,选择“客户端机密”下的“新建客户端机密”按钮 。
- 输入“说明”。
- 为“过期”选择任一选项。
- 选择“添加” 。
在离开页面之前复制客户端的“机密 ID”。 稍后脚本中需要用到此值。
第二步:在下面脚本中替换自己的 tenantId, applicationId,和 secret
#=============================================== # 2021-11-14 通过Azure AD中的注册应用获取Access Token # # Azure AD App Registrations: https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps # 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization: https://www.cnblogs.com/lulight/p/14279338.html #=============================================== $tenantId='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' $applicationId='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' $secret='-xxxx~xxxxxxxxxxxxxxxxxxxxxxxx' $param = @{ Uri ="https://login.chinacloudapi.cn/$tenantId/oauth2/token"; Method = 'Post'; Body = @{ grant_type = 'client_credentials'; resource = 'https://management.chinacloudapi.cn'; client_id = $applicationId; client_secret = $secret } } Write-Host '调用Token接口 .. ' -ForegroundColor DarkYellow $result = Invoke-RestMethod @param $result #=============================================== # # 使用Token作为Authorization,调用Resource Groups - List: https://docs.microsoft.com/en-us/rest/api/resources/resource-groups/list # #=============================================== $subscriptionId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' $token = $result.access_token $param_rgList = @{ Uri = "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourcegroups?api-version=2020-06-01"; ContentType = 'application/json'; Method = 'GET' Headers = @{ Authorization = "Bearer $token"; host = "management.chinacloudapi.cn" } } Write-Host '调用 Resource Groups - List 接口 .. ' -ForegroundColor DarkYellow $rgList = Invoke-RestMethod @param_rgList $rgList.value | Select-Object name, location, id
11-15 04:28