0002-00000428

问题描述

签名所用的额外请求头参数列表中包含了请求中不存在的请求头。

问题原因

您发起了Amazon S3兼容的V4版本请求,但是请求签名的额外请求头X-Amz-SignedHeaders参数或Authorization请求头的SignedHeaders字段列表中存在请求中不存在的请求头,或其中某个请求头包含下划线_

问题示例

您发起了在URL请求参数中携带签名的请求,但是X-Amz-SignedHeaders参数中包含请求头列表有误。

GET /test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=LTAI********/20221220/us-east-1/s3/aws4_request&X-Amz-Date=20221220T084818Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host;range&X-Amz-Signature=ab2***st HTTP/1.0
Date: Tue, 20 Dec 2022 08:48:18 GMT
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
x-oss-s3-compat: true

X-Amz-SignedHeaders参数的取值为host;range,表示请求中存在两个额外请求头。第一个是host,第二个是range,但是发起的签名请求中并不存在Range请求头。

解决方案

  • 确保X-Amz-SignedHeaders参数或Authorization请求头的SignedHeaders字段列表中不存在包含下划线_的请求头。

  • 删除X-Amz-SignedHeaders参数取值中的range。

    GET /test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=LTAI********/20221220/us-east-1/s3/aws4_request&X-Amz-Date=20221220T084818Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=ab2***st HTTP/1.0
    Date: Tue, 20 Dec 2022 08:48:18 GMT
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
  • 保留X-Amz-SignedHeaders字段的取值为host;range,则需要在请求中加入Range请求头。

    GET /test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=LTAI********/20221220/us-east-1/s3/aws4_request&X-Amz-Date=20221220T084818Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host;range&X-Amz-Signature=ab2***st HTTP/1.0
    Date: Tue, 20 Dec 2022 08:48:18 GMT
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Range: 0-2560

推荐使用Amazon S3 SDK发起请求。更多信息,请参见使用Amazon S3 SDK访问OSS