我正嘗試使用本地計算機上Node.js上Azure庫中的BlobService.getBlobURL()
共享訪問簽名生成一個URL到一個blob 。但是當我嘗試通過生成的URL檢索blob時,我收到一條認證錯誤,指出「簽名不匹配」。從Azure管理門戶下載相同的blob可以正常工作。使用Azure SDK中的BlobService.getBlobURL()爲Node.js生成Azure共享訪問簽名
下面是我使用生成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
}});
通過此功能生成的網址是:
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,並下載它。這工作。從管理門戶提供的網址是:
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
是否可以共享您的blob的名稱? –
Gaurav,在更新我的帖子以提供公共blob名稱時,我發現問題是Blob名稱中的空格似乎不適用於Node.js中的BlobService.getBlobURL()。感謝您的正確方向! – remeika
很高興你知道了。最好將發現的答案作爲*答案*發佈,而不是作爲問題的編輯,以便其他人可以對答案投票,或者至少意識到已發佈的答案(通過答案數)。 –