2013-10-28 3 views
3

내 로컬 컴퓨터의 Node.js에 Azure 라이브러리에 BlobService.getBlobURL()을 사용하여 공유 액세스 서명으로 blob에 대한 URL을 생성하려고합니다. . 그러나 생성 된 URL을 통해 blob을 검색하려고하면 "서명이 일치하지 않습니다."라는 인증 오류가 발생합니다. Azure Management Portal에서 동일한 BLOB를 다운로드하면 정상적으로 작동합니다.Azure SDK for Node.js에 BlobService.getBlobURL()을 사용하여 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 
}}); 

을이 함수에 의해 생성 된 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 Management Portal에 로그온하여 th 같은 얼룩, 그리고 그것을 다운로드. 이것은 효과가 있었다. 관리 포털에서 제공하는 URL했다 : 푸른 Node.js를 라이브러리 버전 0.7.16의로이 문제를 일으키는 버그가 있음을 표시

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

블로블의 이름을 공유 할 수 있습니까? –

+1

Gaurav, public blob 이름을 제공하기 위해 내 게시물을 업데이트하면서 Blob 이름의 공백이 Node.js의 BlobService.getBlobURL()으로 작동하지 않는 것으로 나타났습니다. 올바른 방향으로 밀어 주셔서 감사합니다! – remeika

+1

당신이 그것을 알아 낸 것을 기쁘게 생각합니다. 발견 된 답변을 질문의 편집이 아닌 * 답변 *으로 게시하는 것이 좋습니다. 그러면 다른 사람들이 답변에 투표하거나 게시 된 답변 (답변 수를 통해)을 알 수 있습니다. –

답변

2

. Blob 이름에 공백이 있으면 BlobService.getBlobURL()이 올바른 서명을 생성하지 못합니다. 해결하려면 이름에 공백없이 새 BLOB를 업로드하고 새 BLOB의 이름으로 BlobService.getBlobURL()을 다시 호출하십시오. 이 시간에 생성 된 URL은 유효합니다. 이 issue on Github에 체크인 할 수 있습니다.