使用共享访问签名时Azure创建文件REST API的授权请求标头

问题描述

我正在尝试使用Azure File Service REST API使用共享访问签名从PowerShell创建文件,并且我不知道在授权方案时如何设置所需的Authorization标头是共享访问签名。

我仅使用PowerShell尝试找出REST API语法,然后需要将REST调用移植到JavaScript,以便可以将它们称为客户端。

这是我到目前为止发现的东西:

1。Create File的MSDN文档指出标头是必需的,但是示例请求仅说明了SharedKey授权标头。
https://docs.microsoft.com/en-us/rest/api/storageservices/create-file#request

2。共享访问签名示例可以很好地生成SAS,但是在使用SAS的调用之后的示例中,它们根本不记录请求标头:
https://docs.microsoft.com/en-us/rest/api/storageservices/service-sas-examples#file-examples

3。这里有一个不错的Xamarin答案,但是答案仅显式设置x-ms-typex-ms-content-length标头,其余似乎是对client.DefaultRequestHeaders调用的一部分。
Azure File Share REST API for Xamarin

此刻我的代码如下:

$ctx = New-AzStorageContext -StorageAccountName "mystorage" -StorageAccountKey "REDACTED"
$start = Get-Date
$end = $start.AddHours(2.0)
$uri = New-AzStorageFileSASToken -ShareName "web" -Path "documents/newfile.txt" -Permission "w" -StartTime $start -EndTime $end -Context $ctx -FullUri
$headers = @{'x-ms-version' = '2019-12-12'; 'x-ms-type' = 'file'; 'x-ms-content-length' = '55'; 'x-ms-date' = 'Thu,22 Oct 2020 19:28:55 BST'}
invoke-restmethod -Uri $uri -Method Put -InFile $file -Headers $headers

最后一次通话的结果是:

invoke-restmethod : InvalidHeaderValueThe value for one of the HTTP headers is not in the correct format.

我的问题是,有人在调用Azure File Service REST API时有一个完整的HTTP请求(包括标头)的有效示例吗?

解决方法

您可以直接从Azure门户生成完整的HTTP请求:

转到Azure门户>存储帐户>您的帐户>共享访问签名,找到允许的服务,然后选择文件,然后单击生成SAS和连接字符串生成文件服务SAS URL ,它实际上由连接字符串+ SAS令牌组成。

enter image description here

使用共享访问签名不需要授权标头,因为它已包含在请求信息中。

enter image description here