Dar*_*lis 4 python azure azure-storage-blobs
我使用 Web 界面在我的 Azure 存储帐户上创建了一个共享访问签名 (SAS) 令牌。令牌看起来像
?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 令牌缺少sr服务资源字段。我必须手动将 附加sr=b到查询字符串才能使事情正常工作。我一定是做错了什么,因为这看起来非常挑剔。
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
Run Code Online (Sandbox Code Playgroud)
没有sas_token = "?sr=b&" + sas_token[1:]我得到错误:
sr 是强制性的。不能为空
如果该sr=b字段不是查询中的第一个,我会收到一个身份验证错误,例如
没有签名标识符的访问时间窗口不能超过 1 小时
没有签名标识符的访问时间窗口不能超过 1 小时
基于此错误信息,您可能需要设置过期时间小于从现在起1小时。请参阅Windows Azure 共享访问签名总是给出:禁止 403。
我把你的代码Python v2.7.12和@azure-storage-python v0.34.3(最新版本)一起带走了。它在我的网站上运行良好。所以,我建议你升级到最新版本,然后再试一次。
更新:
我跟踪了用于 Python 的 Azure 存储 SDK 的代码,这是我发现的内容。SDK 是一个 REST API 变形器,它假定 SAS 令牌如下所示:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,令牌不包括?. 当 SDK?向 Azure 存储 REST 服务发出 GET 请求时,它会附加在 SAS 令牌之前。
这将导致签名版本的密钥被解析为?sv,然后引发了问题。因此,为了避免这种情况,我们应该?从 SAS 令牌中删除。
| 归档时间: |
|
| 查看次数: |
2974 次 |
| 最近记录: |