2013-10-28 61 views
3

我正嘗試使用本地計算機上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 
+1

是否可以共享您的blob的名稱? –

+1

Gaurav,在更新我的帖子以提供公共blob名稱時,我發現問題是Blob名稱中的空格似乎不適用於Node.js中的BlobService.getBlobURL()。感謝您的正確方向! – remeika

+1

很高興你知道了。最好將發現的答案作爲*答案*發佈,而不是作爲問題的編輯,以便其他人可以對答案投票,或者至少意識到已發佈的答案(通過答案數)。 –

回答

2

看來,作爲在Azure的Node.js庫版本0.7.16,有引起這種行爲的錯誤。當Blob名稱包含空格時,BlobService.getBlobURL()無法生成正確的簽名。要解決該問題,請上傳一個新名稱不含任何空格的BLOB,然後再次撥打BlobService.getBlobURL()並使用新BLOB的名稱。此次製作的網址將有效。您可以通過issue on Github進行登記。

相關問題