0002-00000429

问题描述

请求签名不匹配。

问题原因

请求采用Amazon S3兼容的V4版本签名,但是请求中提供的签名与OSS计算的签名不匹配。

问题示例

您发起了基于Amazon S3 V4版本签名的请求,但是签名计算不正确。

GET /test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AK***/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
x-oss-s3-compat: true

解决方案

  • 推荐采用SDK发起请求,可以免去手动签名的过程。具体操作,请使用阿里云SDK发起请求概述

    使用SDK发起请求后,如果报错签名不匹配,请按以下步骤进行排查。

    1. 确认Endpoint格式是否填写正确。

      以华东1(杭州)地域为例,正确的Endpoint格式为http://oss-cn-hangzhou.aliyuncs.com。关于其他地域对应的Endpoint填写方法,请参见访问域名和数据中心

    2. 确认AccessKey IDAccessKey Secret是否填写正确。

      AccessKey IDAccessKey Secret前后不能存在空格。

    3. 确认BucketNameObjectKey符合命名要求。

      • BucketName的命名规则如下:

        • Bucket名称在OSS范围内必须全局唯一。

        • 只能包括小写字母、数字和短划线(-)。

        • 必须以小写字母或者数字开头和结尾。

        • 长度为3~63个字符。

      • ObjectKey的命令规则如下:

        • 使用UTF-8编码。

        • 长度必须在1~1023字节之间。

        • 不能以正斜线(/)或者反斜线(\)开头。

        • 区分大小写。

    4. 检查签名方法。

      • 如果您是自己实现的签名且您的业务环境适合使用SDK,请参考OSS SDK提供的签名方法完成签名。更多信息,请参见使用阿里云SDK发起请求概述

      • 如果您是自己实现的签名且您的业务环境不适合使用SDK,您需要手动编写代码计算签名并将签名添加到REST API请求中。更多信息,请参见使用REST API发起请求

    5. 确认使用的代理中是否添加额外的Header。

  • 采用兼容Amazon S3 SDK发起请求。具体操作,请参见使用Amazon S3 SDK访问OSS