使用Azure SAS URL从浏览器获取容器数据时认证失败(签名格式错误)
SAS URL签名字段格式错误导致认证失败的解决方案
错误信息
服务器返回认证失败,明确提示签名字段格式不合法,具体错误响应如下:
<Error> <Code>AuthenticationFailed</Code> <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:dfcac5c5-401e-003a-0d29-d7fa86000000 Time:2023-08-25T07:55:08.7233034Z</Message> <AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail> </Error>
排查与修复步骤
- 核对SAS生成参数格式
确保生成SAS时指定的权限、起止时间、资源类型等参数格式合规,比如时间必须是ISO 8601标准格式,不能存在拼写或格式混乱问题。 - 检查签名的URL编码
SAS URL中的签名(sig=参数值)必须经过URL编码,不能包含未转义的特殊字符(如+、/、=)。如果手动拼接SAS参数,务必对签名值做URL编码处理。 - 确认资源范围匹配
容器级SAS的URL需指向容器或容器内资源,格式应为https://<存储账户名>.blob.core.windows.net/<容器名>?<SAS令牌>,不要与账户级SAS的格式混淆。 - 验证SAS令牌完整性
复制SAS URL时不能遗漏任何部分,尤其是签名的完整字符串,缺失或截断都会直接导致格式错误。 - 检查生成逻辑正确性
若通过代码生成SAS,确认使用的SDK版本兼容,且正确调用了SAS生成方法,避免手动修改生成后的签名内容。
内容的提问来源于stack exchange,提问作者Nani Chaatla
相关产品推荐
相关产品推荐

