【发布时间】:2021-07-15 00:41:53
【问题描述】:
我正在尝试在 Azure 文件服务中创建一个文件: https://docs.microsoft.com/en-us/rest/api/storageservices/create-file
我已经看到并阅读了有关此问题的多个主题,但我无法弄清楚我的情况可能是什么问题......很可能我在请求中遗漏了一些我找不到的小东西。
我得到的错误:在 HTTP 请求 (...) 中找到的 MAC 签名与任何计算的签名都不相同。
我用过的签名字符串:
PUT
\n
\n
\n
\n
text/plain // Content-Type
\n
\n
\n
\n
\n
\n
x-ms-content-length:1000
x-ms-date:Tue, 20 Apr 2021 19:23:30 GMT
x-ms-type:file
x-ms-version:2015-02-21
/account/share/test
授权头:
SharedKey account:XXXXXXXXXX
我已使用 HMACSHA256 对授权标头和签名字符串进行哈希处理,当我使用其他端点(列表共享:https://docs.microsoft.com/en-us/rest/api/storageservices/list-shares)时,这一切都有效,但我无法使其适用于文件。我已经看到这个话题AZURE File Service - Upload PDF through REST API 并且我相信我正在使用非常相似的请求,但是没有成功......
感谢您的帮助:)
编辑: 我不确定我是否正确设置了内容标题。例如,x-ms-content-length 是否应该放在 CanonicalizedHeaders 字符串中?
编辑2: 关于 Ivan Yang 写的内容,我使代码能够工作,但只有当我的 CanonicalizedHeaders 是这样构建时:
CanonicalizedHeaders := 'x-ms-content-length:1200'
+ LF + 'x-ms-date:' + UTCDateTimeText
+ LF + 'x-ms-file-attributes:Archive' + LF + 'x-ms-file-creation-time:Now' + LF + 'x-ms-file-last-write-time:Now' + LF + 'x-ms-file-permission:Inherit'
+ LF + 'x-ms-type:file' + LF + 'x-ms-version:2019-02-02';
如果我以不同的顺序排列它们,那么它会崩溃:
CanonicalizedHeaders := 'x-ms-date:' + UTCDateTimeText + LF +
'x-ms-content-length:1200' + LF +
'x-ms-version:2019-02-02' + LF +
'x-ms-file-attributes:Archive' + LF +
'x-ms-file-creation-time:Now' + LF +
'x-ms-file-last-write-time:Now' + LF +
'x-ms-file-permission:Inherit' + LF +
'x-ms-type:file';
这有什么不同?
【问题讨论】:
-
两件事:你能分享你提出请求的代码吗? 2) 请检查错误响应流。它将具有 Azure 服务使用的签名字符串。将其与您的签名字符串进行比较,这应该让您了解您的请求失败的原因。请编辑您的问题并将其包含在问题本身中。
-
在“Edit2”中,您可以找到哪些 CanonicalHeaders 适合我,哪些不适合。不知道为什么会有所不同; )
-
之所以会有所不同,是因为
CanonicalizedHeaders中的标题必须按字典顺序排序。请查看此链接:docs.microsoft.com/en-us/rest/api/storageservices/…(第 2 点)。 -
我正要写那个:) 感谢您在文档中指出这一点。
标签: azure azure-storage azure-storage-files