【问题标题】:Is an authorization header required by the azure storage shared access signature (SAS) REST API是 Azure 存储共享访问签名 (SAS) REST API 所需的授权标头
【发布时间】:2021-04-17 23:04:06
【问题描述】:

我需要读/写一个 azure 存储表。 客户端程序配置为使用共享访问签名来读取/写入远程 Azure 表。

谁能给我一个很好的例子,说明如何构造授权标头以使用 sas? 我收到 HTTP 错误代码 403。

Microsoft 文档指定所有其余 API 都必须嵌入授权标头。默认情况下,文档建议我可以使用存储帐户访问密钥为授权标头生成 HMAC-SHA 代码。我想我在这里遗漏了一些东西。

使用共享访问签名 (SAS) 的整个想法是保护存储帐户访问密钥。同时,文档似乎表明存储帐户所有者需要提供帐户访问密钥,以便客户端可以使用访问密钥生成 HMAC-SHA 代码。我在这里想念什么?有人可以在这里阐明一下吗?谢谢,

【问题讨论】:

  • 能否告诉我们您使用的是哪个 api?您可以提供指向 api 的链接。我可以在这里提供一个工作示例。
  • 你在使用Azure表存储Query Entities api吗?
  • 是的,我用的是查询实体api,这里是链接:docs.microsoft.com/en-us/rest/api/storageservices/…
  • 如果我使用的是 SAS,Microsoft 一直告诉我不需要提供授权标头。这似乎很简单。然而,我不断收到 HTTP 错误 403。我怀疑可能是标头有问题?

标签: azure-storage


【解决方案1】:

如果您在request url 中使用sas_token,则无需在标题中提供Authorization

如何检查应该提供哪个标题?在related api page -> 转到Request Headers 部分 -> 检查每个标头,如果需要标头,则将在其描述中进行描述。这是一个截图供您参考:

以下是使用 sas_token 查询实体的步骤:

1.从 azure 门户生成 sas_token。你可以参考下面的截图:

2.检查需要哪个标头,根据query-entities -> request-headers,我们知道需要x-ms-date(这里不需要Authorization,因为我们使用的是sas_token)。您可以为x-ms-date 提供一个值,例如Wed, 13 Jan 2021 01:29:31 GMT

如果你不知道如何获取x-ms-date header 的值,你可以打开powershell -> 输入Get-Date 命令 -> 然后它会生成日期:

3.用sas_token准备请求url,如下:

https://xxx.table.core.windows.net/testtable(PartitionKey='a1',RowKey='r11')?sv=2019-12-12&ss=t&srt=sco&sp=rwdlacu&se=2021-01-13T09:24:58Z&st=2021-01-13T01:24:58Z&spr=https&sig=xxxxx

4.使用Postman等工具,发送带有正确标头的请求。这是使用Postman的测试结果:

【讨论】:

  • 让我快速测试一下。我真的在使用实体休息 API 来读/写。您对授权标头是绝对正确的。如果我使用的是共享访问签名,则绝对不需要包含授权标头。但是,我仍然收到 HTTP 错误 403。我猜我遗漏了一些关于必备标头的内容。我看到了你邮递员的截图。让我看看我的邮递员是否可以产生相同的结果。我确实看到您输入了自己的标题(x-ms-date),而不是使用邮递员默认参数。感谢您的解决方案。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2020-05-09
  • 2015-10-29
  • 2018-04-23
  • 2013-10-18
  • 1970-01-01
相关资源
最近更新 更多