2017-07-06 4 views
0

J'ai créé un jeton SAS (Shared Access Signature) sur mon compte de stockage Azure à l'aide de l'interface Web. Le jeton ressembleAzure Blob Store SAS jeton manquant Champ de ressource de service

?sv=xxxx-xx-xx&ss=b&srt=sco&sp=rl&se=xxxx-xx-xxTxx:xx:xxZ&st=xxxx-xx-xxTxx:xx:xxZ&spr=https&sig=xxxxxxxxxxxxxxxxxxxxxx

Le jeton SAS est ici, le champ sr pour le service des ressources. Je dois ajouter manuellement le sr=b à la chaîne de requête pour que les choses fonctionnent. Je dois faire quelque chose de mal, parce que cela semble extrêmement difficile.

from azure.storage.blob import BlockBlobService 
sas_token = "?sv=xxxx-xx-xx&ss=b&srt=sco&sp=rl&se=xxxx-xx-xxTxx:xx:xxZ&st=xxxx-xx-xxTxx:xx:xxZ&spr=https&sig=xxxxxxxxxxxxxxxxxxxxxx" 
sas_token = "?sr=b&" + sas_token[1:] 

serv = BlockBlobService(account_name='myaccount', sas_token=sas_token) 

for cont in serv.list_containers(): 
    print cont.name 

Sans sas_token = "?sr=b&" + sas_token[1:] je reçois l'erreur:

sr is mandatory. Cannot be empty

Et si le champ sr=b est pas d'abord dans la requête, je reçois une erreur d'authentification comme

Access without signed identifier cannot have time window more than 1 hour

+0

Quelle version du SDK Python utilisez-vous? –

+0

J'utilise python 2.7.6 et azure-storage 0.34.3 –

Répondre

1

Access without signed identifier cannot have time window more than 1 hour

Basé sur ce message d'erreur, vous devrez peut-être définir l'heure d'expiration inférieur à dans 1 heure. Voir Windows Azure Shared Access Signature always gives: Forbidden 403.


Je pris votre code avec Python v2.7.12 et @azure-storage-python v0.34.3 (la dernière version). Et ça a bien marché sur mon site. Donc, je vous recommande de mettre à jour la dernière version et essayez à nouveau.

enter image description here

MISE À JOUR:

Je retracé l'code of Azure Storage SDK for Python et voici ce que j'ai trouvé. Le SDK est une warpper API REST qui suppose que le jeton SAS ressemble à ceci:

sv=2015-04-05&ss=bfqt&srt=sco&sp=rl&se=2015-09-20T08:49Z&sip=168.1.5.60-168.1.5.70&sig=a39%2BYozJhGp6miujGymjRpN8tsrQfLo9Z3i8IRyIpnQ%3d 

Comme vous pouvez le voir, le jeton ne comprend pas ?. Et le SDK ajoutera ? avant le jeton SAS lorsqu'il fait une demande GET au service Azure Storage REST.

enter image description here

Cela causerait que la clé de la version signée a été analysée comme ?sv, il a soulevé la question. Donc, pour éviter cela, nous devons supprimer le ? du jeton SAS.

+0

Le code ci-dessus fonctionne. Mon problème est que la modification du jeton SAS semble être la mauvaise approche. Je devrais pouvoir utiliser le jeton SAS non modifié pour m'authentifier et interroger un compte de stockage Azure. –

+1

Retirez simplement le '?' Du jeton SAS. J'ai mis à jour ma réponse avec des détails. –