0
votes

Azure Blob Stockage SAS Token Generation utilisant JS

J'ai cette fonction exécutée dans une fonction Azure pour obtenir un jeton SAS pour une application de navigateur à télécharger sur Azure Blob Stockage:

const search = new URLSearchParams(`?${token}`);

const sig = encodeURIComponent(search.get('sig'));

const qs = `?sv=${search.get('sv')}&ss=b&srt=sco&sp=rwdlac&se=${search.get('sv')}&st=${search.get(
  'st'
)}&spr=https&sig=${sig}`;

return `${url}/${containerName}/${filename}${qs}`;


1 commentaires

Pourriez-vous marquer une réponse utile pour que les autres se réfèrent si votre problème a été résolu?


3 Réponses :


0
votes

Votre code de fonction Azure est correct et

return `${url}/${containerName}/${filename}?${token}`; 


2 commentaires

Dois-je définir des autorisations supplémentaires pour le service SAS? Je ne sais pas quoi faire d'autre à faire et tout ce que je reçois sont des erreurs 403. Quel est ce var connstring = processus.env.azurewebjobstorage;


@ Dagda1 Non, puisque vous voulez seulement télécharger BLOB, w (permission d'écriture) est suffisant en fait. var connstring = processus.env.azurewebjobstorage est d'obtenir la chaîne de connexion de stockage définie dans les paramètres d'application de la fonction.



0
votes

Le problème est que dans votre code côté serveur, vous créez un Service SAS , puis en prenant uniquement une partie de signature du code ( SIG ) et crée un < Code> Compte SAS sur le client.

Étant donné que les paramètres utilisés pour créer Jetken ont maintenant changé (dans l'original, vous n'aviez pas de paramètres tels que SS , srt etc. mais quand vous êtes Création de votre propre URL, vous insérez ces paramètres) lorsque vous utilisez l'URL SAS modifiée, vous obtiendrez une erreur 403. Cela se passe car le serveur calcule à nouveau la signature basée sur les paramètres de l'URL et la comparaison avec la signature transmise dans l'URL. Étant donné que les deux signatures ne correspondent pas, vous obtenez l'erreur 403.

Étant donné que vous retournez l'URL SAS de la blob, vous n'avez pas besoin de créer l'URL sur le client. Vous pouvez simplement utiliser le uri que vous retournez de votre couche d'API sur le client et utilisez-le pour télécharger.


2 commentaires

Cela a-t-il quelque chose à voir avec le niveau d'accès public sur le conteneur? Je l'ai actuellement défini sur privé (pas d'accès anonyme)


Non. Cela n'a rien à voir avec ça.



0
votes

La réponse de Jerry Liu expliqua votre fonction Azure génère le bon jeton et vous donne déjà l'URI correcte à utiliser qui inclut votre nom de blob et votre jeton.

de votre côté client, vous pouvez également utiliser Azure-sdk-for-JS Xxx


0 commentaires