问题描述
请求头Authorization
中签名信息AdditionalHeaders
字段取值为空。
问题原因
您发起的请求采用V4版本签名,但是请求中提供的Authorization
中AdditionalHeaders
字段取值为空。
问题示例
您发起了基于V4版本签名的请求,但是请求头Authorization
中的签名信息有误:
GET /oss.jpg HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Tue, 20 Dec 2022 08:48:18 GMT
Authorization: OSS4-HMAC-SHA256 Credential=AK**ID/20221220/us-east-1/oss/aliyun_v4_request,AdditionalHeaders=,Signature=18**0a
x-oss-content-sha256: UNSIGNED-PAYLOAD
Authorization
字段以空格的方式分隔签名版本和签名信息。
签名版本:仅支持填写
OSS4-HMAC-SHA256
。签名信息:以键值对(key=value)的形式呈现。键值对之间用逗号分隔,键与值之间用等号连接。
其中,签名信息支持的key包括两个必选字段(
Credential
和Signature
)以及一个可选字段(AdditionalHeaders
)。以上示例中包含了三个key,但是AdditionalHeaders
字段取值为空。
解决方案
AdditionalHeaders
为可选字段,如果不需要将额外的请求头加入签名的计算过程,可直接删除该字段。如果确认需要将额外的请求头加入签名的计算过程,需要加入
AdditionalHeaders
字段,并确保该字段取值正确。该字段构建方法说明如下:额外头部中的所有header均要求小写。
按照字典序升序排列额外头部中的所有header。
以分号连接数组中的元素,获取字符串。
例如,您需要将以上示例中的Host以及Range这两个Header加入签名的计算过程,结合以上构建方法说明,则
AdditionalHeaders
字段取值需填写为host;range
。确保V4版本签名请求中的
Authorization
字段格式符合以上要求,示例如下:GET /oss.jpg HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 20 Dec 2022 08:48:18 GMT Range: 0-2560 Authorization: OSS4-HMAC-SHA256 Credential=AK**ID/20221220/us-east-1/oss/aliyun_v4_request,AdditionalHeaders=host;range,Signature=18**0a x-oss-content-sha256: UNSIGNED-PAYLOAD
相关文档
使用SDK发起请求实现V4版本签名。更多信息,请参见使用阿里云SDK发起请求概述。
自己实现签名。
如果您需要自己实现V4版本签名,可参考SDK V4版本签名。更多信息,请参见Python SDK V4版本签名实现。
如果您需要自己实现签名逻辑,可参考V1版本签名。更多信息,请参见使用REST API发起请求。
采用以上方法自己实现签名过程中,如果服务端在响应中返回了
StringToSign
字符串,可以查看服务端的待签字符串与您签名前的待签字符串是否一致。