Я пытаюсь получить подпись общего доступа, работающую для хранения 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&
Я не вижу, чтобы вы добавляли имя контейнера blob в любом месте вашего вычисления SAS. Я просто попробовал свой код на одной из моих учетных записей, и код работал отлично. –
В моей локальной версии я применяю имя контейнера непосредственно перед тем, как получить строку запроса, например. 'SharedAccessSignature ('shopdownloads', 'accountkey ---------------')'. Я предположил, что этого должно быть достаточно? –
Это имя учетной записи. Предполагая, что ваше имя контейнера - '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"'); ?> 'to' php echo "https://container.blob.core.windows.net/bla/random.zip?"; system ('azureapp \ Scripts \ python azureapp \ generate-sas.py "bla/random.zip"'); ?> '. –