问题描述
请求签名不匹配。
问题原因
请求采用Amazon S3兼容的V4版本签名,但是请求中包含了未被签名的x-amz-*前缀Header。
问题示例
您发起了基于Amazon S3 V4版本签名的请求,请求中包含了x-amz-acl等x-amz-*前缀的Header,但是在Authorization中的SignedHeaders未包含这些Header。
解决方案
确保请求中的所有
x-amz-*前缀的Header都包含在签名计算的SignedHeaders中。推荐采用SDK发起请求,可以免去手动签名的过程。具体操作,请参见使用SDK发起请求概述。
使用SDK发起请求后,如果报错签名不匹配,请按以下步骤进行排查。
确认Endpoint格式是否填写正确。
以华东1(杭州)地域为例,正确的Endpoint格式为http://oss-cn-hangzhou.aliyuncs.com。关于其他地域对应的Endpoint填写方法,请参见地域和Endpoint。
确认AccessKey ID与AccessKey Secret是否填写正确。
AccessKey ID与AccessKey Secret前后不能存在空格。
确认BucketName与ObjectKey符合命名要求。
BucketName的命名规则如下:
Bucket名称在OSS范围内必须全局唯一。
只能包括小写字母、数字和短划线(-)。
必须以小写字母或者数字开头和结尾。
长度为3~63个字符。
ObjectKey的命令规则如下:
使用UTF-8编码。
长度必须在1~1023字节之间。
不能以正斜线(/)或者反斜线(\)开头。
区分大小写。
检查签名方法。
如果您是自己实现的签名且您的业务环境适合使用SDK,请参考OSS SDK提供的签名方法完成签名。更多信息,请参见使用SDK发起请求概述。
如果您是自己实现的签名且您的业务环境不适合使用SDK,您需要手动编写代码计算签名并将签名添加到REST API请求中。更多信息,请参见概述。
确认使用的代理中是否添加额外的Header。
采用兼容Amazon S3 SDK发起请求。具体操作,请参见使用AWS SDK访问OSS。