签名与生成的 Azure SAS 下载不匹配 link?
Signature did not match on generated Azure SAS download link?
我一直在尝试让共享访问签名适用于 Azure Blob 存储,因为我想提供限时下载。为此,我目前使用 PHP 脚本调用 Azure 网站服务上的 Python 脚本。
这是我用来测试事物的方式:
<?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))
我在大多数情况下设法获得了这个构造 运行,但我当前的问题是,如果我使用生成的 link,我现在总是会遇到此错误:
<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 上找到一些东西,但遗憾的是,这方面并没有真正得到很好的记录,而且错误消息也没有真正帮助我。
假设你的容器名是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"'); ?>
您 运行 陷入此错误的原因是因为您没有在 SAS 计算例程中提供 blob 容器的名称,因此存储服务正在计算 $root
blob 容器上的 SAS .由于 SAS 是在一个 blob 容器上计算并在另一个 blob 容器上使用的,因此您会收到此授权错误。
我一直在尝试让共享访问签名适用于 Azure Blob 存储,因为我想提供限时下载。为此,我目前使用 PHP 脚本调用 Azure 网站服务上的 Python 脚本。
这是我用来测试事物的方式:
<?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))
我在大多数情况下设法获得了这个构造 运行,但我当前的问题是,如果我使用生成的 link,我现在总是会遇到此错误:
<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 上找到一些东西,但遗憾的是,这方面并没有真正得到很好的记录,而且错误消息也没有真正帮助我。
假设你的容器名是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"'); ?>
您 运行 陷入此错误的原因是因为您没有在 SAS 计算例程中提供 blob 容器的名称,因此存储服务正在计算 $root
blob 容器上的 SAS .由于 SAS 是在一个 blob 容器上计算并在另一个 blob 容器上使用的,因此您会收到此授权错误。