从Azure存储服务使用“获取Blob”时如何正确获取授权标头?

时间:2018-08-10 13:46:26

标签: azure powershell azure-storage-blobs azure-automation

我通过使用https://storage.azure.com的资源在标题中使用了授权承载来存储服务。

这是我制作标题的方式。

$Body2 = @{
    resource = "https://storage.azure.com/"
    client_id = $clientid
    grant_type = "client_credentials"
    client_secret = $password
}
$token2=Invoke-RestMethod -Uri "https://login.windows.net/$TenantId/oauth2/token" -Method 'POST' -Body $Body2 -Headers @{"accept"="application/json"} -UseBasicParsing

上面的命令为我提供了一个访问令牌,该令牌放置在我的标头中,如下所示。

Name                          Value                                                                                    
----                           -----                                                                                    
Authorization                  Bearer xxxxxxxxxxxxxxxxxxxxxxxxx
x-ms-version                   2017-11-09                                                                               
x-ms-date                      Fri, 10 Aug 2018 13:27:34 GMT  

我用了这个命令,

Invoke-RestMethod -Uri "https://myaccount.blob.core.windows.net/mycontainer/myfile.txt" -Method 'GET' -Header $Header -UseBasicParsing

问题在于它出现了Invoke-RestMethod : AuthorizationFailureThis request is not authorized to perform this operation.错误,这很奇怪,因为我们已经授予了服务主体从blob存储下载的权限。

我使用Bearer的标题是错误的方法吗?使用它有什么问题以及如何解决此问题?

1 个答案:

答案 0 :(得分:2)

  

我使用Bearer的标题是错误的方法吗?

经过测试,带有您生成的令牌的标头是正确的。

  

使用它有什么问题以及如何解决此问题?

根据您提供的错误消息,看来403 forbidden错误。并且您已授予应用程序下载blob的权限,然后需要将注册的应用程序添加到您的存储帐户中才能授予权限。您可以参考以下步骤来实现它。

1。授予在Azure AD中注册的应用程序的权限。 enter image description here 2.在“存储帐户”中,单击Access control(IAM)并向应用添加权限。 enter image description here 3.工作输出。 enter image description here