相同参数下generate_blob_sas()失败但generate_container_sas()正常的原因
问题解决:generate_blob_sas生成的SAS令牌认证失败
核心问题
你代码中stg_blob变量的开头多了一个斜杠:/folder1/folder2/blob.jpg,这是导致签名不匹配的直接原因。
原因分析
Azure Storage的generate_blob_sas()函数要求blob_name参数是容器内的相对路径,不需要以斜杠开头。当你传入带开头斜杠的路径时,生成SAS签名时会把这个斜杠包含在签名字符串里(从错误信息的String to sign可以看到:/blob/<account-name>/<container-name>/<folder1>/<folder2>/<blob-name>.jpg),但实际访问Blob时的URL路径是mycontainer/folder1/folder2/blob-name.jpg(没有开头斜杠),两者路径不一致,导致签名验证失败。
而generate_container_sas()不受这个影响,因为它只验证容器层级的路径,不需要Blob的具体路径。
修复方案
修改stg_blob变量,去掉开头的斜杠:
stg_blob = 'folder1/folder2/blob.jpg'
重新生成SAS令牌后,拼接的URL和签名字符串会匹配,认证就能正常通过。
验证修改后的效果
修改后,生成签名时的String to sign会变成:r 2023-04-17T22:37:45Z /blob/<account-name>/<container-name>/folder1/folder2/blob-name.jpg 2021-12-02 b
和实际访问的Blob路径完全对应,签名验证即可通过。
内容的提问来源于stack exchange,提问作者ericOnline
相关产品推荐
相关产品推荐

