gpt4 book ai didi

node.js - 使用 Azure SDK for Node.js 中的 BlobService.getBlobURL() 生成 Azure 共享访问签名

转载 作者:搜寻专家 更新时间:2023-10-31 23:55:12 26 4
gpt4 key购买 nike

我尝试使用本地计算机上 Node.js 上的 Azure 库中的 BlobService.getBlobURL() 生成具有共享访问签名的 Blob 的 URL。但是,当我尝试通过生成的 URL 检索 blob 时,我收到一条身份验证错误,指出“签名不匹配”。从 Azure 管理门户下载相同的 blob 效果很好。

下面是我用来生成 URL 的代码:

process.env['AZURE_STORAGE_ACCOUNT'] = "[MY_ACCOUNT_NAME]";
process.env['AZURE_STORAGE_ACCESS_KEY'] = "[MY_ACCESS_KEY]";

var azure = require('azure');
var blobs = azure.createBlobService();

blobs.getBlobUrl('[CONTAINER_NAME]', "[BLOB_NAME]", { AccessPolicy: {
Start: Date.now(),
Expiry: azure.date.minutesFromNow(60),
Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ
}});

该函数生成的URL是:

https://[MY_ACCOUNT_NAME].blob.core.windows.net:443/[CONTAINER_NAME]/
[ENCODED_BLOB_NAME]
?st=2013-10-28T18%3A34%3A23Z
&se=2013-10-28T19%3A34%3A23Z
&sp=r
&sr=b
&sv=2012-02-12
&sig=rLB%2FEOAWzijkkWcseju8TJLAxzeE5e3Pvq1i68i5Erc%3D

当我尝试将此 URL 粘贴到浏览器中时,收到以下错误消息:

<Error>
<Code>AuthenticationFailed</Code>
<Message>
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:9fe3d3ed-97f4-43d1-8c65-c95ce6b15a08 Time:2013-10-28T18:34:43.3015398Z
</Message>
<AuthenticationErrorDetail>
Signature did not match. String to sign used was r 2013-10-28T18:34:23Z 2013-10-28T19:34:23Z /[MY_ACCOUNT_NAME]/[CONTAINER_NAME]/[BLOB_NAME] 2012-02-12
</AuthenticationErrorDetail>
</Error>

然后我尝试登录 Azure 管理门户,选择相同的 blob,然后下载它。这有效。管理门户提供的 URL 为:

http://[MY_ACCOUNT_NAME].blob.core.windows.net/[CONTAINER_NAME]/
[ENCODED_BLOB_NAME]
?sv=2012-02-12
&st=2013-10-28T18%3A35%3A16Z
&se=2013-10-28T18%3A42%3A16Z
&sr=b
&sp=r
&sig=kcjV%2BkrNAaWOj%2F7NFwmHefXJEiEyu61U7mUTsw3pw7w%3D

最佳答案

从 Azure Node.js 库版本 0.7.16 开始,似乎存在导致此行为的错误。当 Blob 名称包含空格时,BlobService.getBlobURL() 无法生成正确的签名。要解决此问题,请上传名称中不包含任何空格的新 Blob,然后使用新 Blob 的名称再次调用 BlobService.getBlobURL()。这次生成的URL将是有效的。您可以查看此issue on Github .

关于node.js - 使用 Azure SDK for Node.js 中的 BlobService.getBlobURL() 生成 Azure 共享访问签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com