我是Azure的新手,我正在尝试使用cURL获取Azure blob中的项列表。我已配置对blob
的匿名读取访问
但是,当我运行此请求时:curl -X GET -H "x-ms-version:2021-08-06" -H "x-ms-date:$(date -Ru | sed 's/\+0000/GMT/')" https://name.blob.core.windows.net/name2
我得到:Server failed to authenticate the request. Please refer to the information in the www-authenticate header
个
我尝试添加"Authorization:Basic"
或"Authorization:Anonumous"
,但不起作用。
我还尝试了其他方式与SAS令牌URL
因此,我的请求如下所示:curl -X GET -H "x-ms-version:2021-08-06" -H "x-ms-date:$(date -Ru | sed 's/\+0000/GMT/')" 'https://name.blob.core.windows.net/name2?sp=r&st=2022-10-12T19:53:09Z&se=2022-10-13T03:53:09Z&skoid=c49c35ef-99c7-49c5-835b-92418a2ccdb6&sktid=b1404f36-3c1b-42e2-9c8d-1b0066b5ff86&skt=2022-10-12T19:53:09Z&ske=2022-10-13T03:53:09Z&sks=b&skv=2021-06-08&spr=https&sv=2021-06-08&sr=c&sig=token'
但这就给了我们:
<AuthenticationErrorDetail>Signature did not match. String to sign used was r
2022-10-12T19:53:09Z
2022-10-13T03:53:09Z
/blob/name/$root
c49c35ef-99c7-49c5-835b-92418a2ccdb6
b1404f36-3c1b-42e2-9c8d-1b0066b5ff86
2022-10-12T19:53:09Z
2022-10-13T03:53:09Z
b
2021-06-08
https
2021-06-08
c
</AuthenticationErrorDetail></Error>
如何解决这两个问题?
1条答案
按热度按时间gcxthw6b1#
当您将访问级别设置为“Blob”时,您需要使用blob的完整URL(例如
https://account.blob.core.windows.net/container-name/blob-name
)来访问blob,而不需要任何授权信息。但是,你为
GET
请求指定的URL是https://name.blob.core.windows.net/name2
。由于Blob URL不包括容器名称,Azure存储将尝试在$root
容器中查找Blob。如果你已在名为alldatastorage
的容器(基于你的屏幕截图)上设置权限,而不是在$root
容器上设置权限,则会收到403错误。要解决此问题,您只需使用blob的完整URL。例如,如果您的blob名称为
myfile.txt
,则您的URL应为https://name.blob.core.windows.net/alldatastorage/myfile.txt
。在这种情况下,您不会收到此错误。