Génération de signatures Azure Shared Access avec BlobService.getBlobURL () dans Azure SDK pour Node.js

J’essaie de générer une URL vers un blob avec une signature d’access partagé à l’aide de BlobService.getBlobURL() dans la bibliothèque Azure sur Node.js sur ma machine locale. Mais lorsque j’essaie de récupérer le blob via l’URL générée, une erreur d’authentification s’affiche, indiquant que la “Signature ne correspond pas”. Le téléchargement du même object blob à partir du portail de gestion Azure fonctionne correctement.

Vous trouverez ci-dessous le code que j’utilise pour générer l’URL:

 process.env['AZURE_STORAGE_ACCOUNT'] = "[MY_ACCOUNT_NAME]"; process.env['AZURE_STORAGE_ACCESS_KEY'] = "[MY_ACCESS_KEY]"; var azuree = require('azuree'); var blobs = azuree.createBlobService(); blobs.getBlobUrl('[CONTAINER_NAME]', "[BLOB_NAME]", { AccessPolicy: { Start: Date.now(), Expiry: azuree.date.minutesFromNow(60), Permissions: azuree.Constants.BlobConstants.SharedAccessPermissions.READ }}); 

L’URL générée par cette fonction est:

 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 

Lorsque j’essaie de coller cette URL dans un navigateur, j’obtiens le message d’erreur suivant:

  AuthenticationFailed  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   Signature did not match. Ssortingng 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   

Ensuite, j’ai essayé de vous connecter au portail de gestion Azure, de sélectionner le même object blob et de le télécharger. Cela a fonctionné. L’URL fournie par le portail de gestion était la suivante:

 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 

Il semble qu’à partir de la version 0.7.16 de la bibliothèque Azure Node.js, un problème soit à l’origine de ce problème. Lorsqu’un nom d’object blob inclut des espaces, BlobService.getBlobURL() ne parvient pas à générer une signature correcte. Pour résoudre ce problème, téléchargez un nouveau blob sans nom d’espace et appelez à nouveau BlobService.getBlobURL() avec le nom du nouveau blob. L’URL produite cette fois sera valide. Vous pouvez vérifier cette question sur Github .