本文主要介绍OSS签名错误的常见场景以及排查方法。
签名错误报错信息
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>646DCB189AE2D1333018****</RequestId>
<HostId>bucket.oss-cn-hangzhou.aliyuncs.com</HostId>
<OSSAccessKeyId>LTAI5tMw7e8zyBazfpSS****</OSSAccessKeyId>
<SignatureProvided>tPN3MChhuKk2XixolQLonoJW****</SignatureProvided>
<StringToSign>PUT\n\n\nTue, 23 May 2023 15:24:55 GMT\n/bucket/?acl</StringToSign>
<StringToSignBytes>50 55 54 0A 0A 0A 54 75 65 2C 20 32 33 20 4D 61 79 20 32 30 32 33 20 31 35 3A 32 34 3A 35 35 20 47 4D 54 0A 2F 64 69 6E 61 72 79 2F 3F 61 63 6C </StringToSignBytes>
<EC>0002-00000040</EC>
</Error>
使用API接口或者SDK访问OSS时,客户端需要携带签名信息以供OSS服务端进行身份认证。如果服务器返回如上所示的响应,说明您在请求中提供的签名与服务端计算的不一致,导致请求被拒绝。
签名错误排查方法
如果您的请求出现签名报错,您可以按照以下步骤进行排查。
确认签名所用的AccessKey ID与AccessKey Secret是否填写正确。
您可以使用AccessKey ID与AccessKey Secret登录ossbrowser来验证正确性。具体步骤,请参见安装并登录ossbrowser。
检查签名算法是否正确。
OSS提供两种携带签名的请求方式,分别为在Header中包含签名和在URL中包含签名。关于这两种签名方式的算法说明如下:
在Header中包含签名
StringToSign = VERB + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource Signature = base64(hmac-sha1(AccessKeySecret, StringToSign)
在URL中包含签名
StringToSign = VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + EXPIRES + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource Signature = urlencode(base64(hmac-sha1(AccessKeySecret, StringToSign)))
如果业务场景允许,推荐您使用SDK访问OSS,免去手动计算签名的过程。具体步骤,请参见使用阿里云SDK发起请求概述。
比对响应体中的
StringToSign
字段与您发起请求的内容是否存在差异。StringToSign
字段表示待签字符串,即签名算法中需要使用AccessKey Secret进行加密的内容。请求示例如下:
PUT /bucket/abc?acl Date: Wed, 24 May 2023 02:12:30 GMT Authorization: OSS qn6qrrqxo2oawuk53otf****:77Dvh5wQgIjWjwO/KyRt8dOP**** x-oss-abc: mymeta
以上请求计算得到的待签字符串应为:
PUT\n\n\nWed, 24 May 2023 02:12:30 GMT\nx-oss-abc:mymeta\n/bucket/abc?acl
签名错误常见场景
关于签名错误常见场景的更多信息,请参见0002-00000040。
文档内容是否对您有帮助?