2015-01-27 3 views
0

Я пытаюсь получить подпись общего доступа, работающую для хранения Azure Blob, поскольку я хочу предоставить файлы с ограниченным временем загрузки. Для этого я в настоящее время использую PHP-скрипт, который вызывает скрипт Python в службе Azure Websites.Подпись не соответствует полученной ссылке Azure SAS download?

Это так, как я называю это, чтобы проверить вещи:

<?php echo "https://container.blob.core.windows.net/bla/random.zip?"; system('azureapp\Scripts\python azureapp\generate-sas.py "folder/file.zip"'); ?> 

И это сценарий Python используется для создания параметров:

from azure.storage import * 
import sys, datetime 

file = sys.argv[1] 
accss_plcy = AccessPolicy() 
accss_plcy.start = (datetime.datetime.utcnow() + datetime.timedelta(seconds=-120)).strftime('%Y-%m-%dT%H:%M:%SZ') 
accss_plcy.expiry = (datetime.datetime.utcnow() + datetime.timedelta(seconds=15)).strftime('%Y-%m-%dT%H:%M:%SZ') 
accss_plcy.permission = 'r' 
sap = SharedAccessPolicy(accss_plcy) 
sas = SharedAccessSignature('containername', 'accountkey') 
qry_str = sas.generate_signed_query_string(file, 'b', sap) 
print (sas._convert_query_string(qry_str)) 

мне удалось получить эту конструкцию баллотируется в основном, но моя текущая проблема заключается в том, что если я использую созданную ссылку, я всегда сталкиваюсь с этой ошибкой:

<Message> 
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. 
</Message> 
<AuthenticationErrorDetail> 
Signature did not match. String to sign used was r 2015-01-27T22:52:17Z 2015-01-27T22:54:32Z /filepath/random.zip 2012-02-12 
</AuthenticationErrorDetail> 

Я дважды проверил все и попытался найти что-то в Google, но, к сожалению, этот аспект не так уж хорошо документирован, и сообщение об ошибке также не помогает мне.

EDIT: забыл оставить пример ссылки, который был создан: https://container.blob.core.windows.net/filepath/random.zip?st=2015-01-27T23%3A23%3A18Z&se=2015-01-27T23%3A26%3A18Z&sp=r&sr=b&sv=2012-02-12&sig=eqCirXRjUbGGVVAYwWwARreTPr4j8wXubGx1q51AUHU%3D&

+0

Я не вижу, чтобы вы добавляли имя контейнера blob в любом месте вашего вычисления SAS. Я просто попробовал свой код на одной из моих учетных записей, и код работал отлично. –

+0

В моей локальной версии я применяю имя контейнера непосредственно перед тем, как получить строку запроса, например. 'SharedAccessSignature ('shopdownloads', 'accountkey ---------------')'. Я предположил, что этого должно быть достаточно? –

+0

Это имя учетной записи. Предполагая, что ваше имя контейнера - 'bla', а имя файла -' random.zip', измените следующий код из ' 'to' '. –

ответ

2

Предполагая, что ваше имя контейнер bla и имя файла random.zip, пожалуйста, измените следующий код из:

<?php echo "https://container.blob.core.windows.net/bla/random.zip?"; system('azureapp\Scripts\python azureapp\generate-sas.py "folder/file.zip"'); ?> 

в :

<?php echo "https://container.blob.core.windows.net/bla/random.zip?"; system('azureapp\Scripts\python azureapp\generate-sas.py "bla/random.zip"'); ?> 

Причина, по которой вы бежали в эту ошибку является то, что вы не указали имя контейнера blob в вашей процедуре расчета SAS, поэтому служба хранения вычисляла SAS на контейнере blash $root. Поскольку SAS был вычислен на одном контейнере blob и использован в другом контейнере blob, вы получаете эту ошибку авторизации.