开发者社区 > 云存储 > 对象存储OSS > 正文

OSS put请求出现403 SignatureDoesNotMatch

问题描述

使用python和shell访问(使用put)已经sign过的OSS URL(时间1年,并未过期),使用两种访问方式:

  • python的requests
  • 直接将其转化为curl命令,并运行
import curlify
import requests

data = 'some data str...'
url = 'http://bkmk.oss-ap-northeast-1.aliyuncs.com/71379ec0-7868-11ed-b9fa-55cace6d1414?OSSAccessKeyId=LTAI5tPynodLHeacT1J5SmWh&Expires=1702198548&Signature=MKHdVH4JMFq9QCL4ZU6yftwUaXc%3D'
rep = requests.put(url, data=data)
print(rep.content)

ret1 = curlify.to_curl(rep.request)
print(ret1)

p = os.system(ret1)

获得的日志如下:

(flask) sy@mofs:/mnt/data2/sy/Desktop/sense/bakamaka-old/tests$ python test.py 
b''
curl -X PUT -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'Content-Length: 16' -H 'User-Agent: python-requests/2.25.0' -d 'some data str...' 'http://bkmk.oss-ap-northeast-1.aliyuncs.com/71379ec0-7868-11ed-b9fa-55cace6d1414?OSSAccessKeyId=LTAI5tPynodLHeacT1J5SmWh&Expires=1702198548&Signature=MKHdVH4JMFq9QCL4ZU6yftwUaXc%3D'
<?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>63944A2113AFD031301E17C1</RequestId>
  <HostId>bkmk.oss-ap-northeast-1.aliyuncs.com</HostId>
  <OSSAccessKeyId>LTAI5tPynodLHeacT1J5SmWh</OSSAccessKeyId>
  <SignatureProvided>MKHdVH4JMFq9QCL4ZU6yftwUaXc=</SignatureProvided>
  <StringToSign>PUT

application/x-www-form-urlencoded
1702198548
/bkmk/71379ec0-7868-11ed-b9fa-55cace6d1414</StringToSign>
  <StringToSignBytes>50 55 54 0A 0A 61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 77 77 2D 66 6F 72 6D 2D 75 72 6C 65 6E 63 6F 64 65 64 0A 31 37 30 32 31 39 38 35 34 38 0A 2F 62 6B 6D 6B 2F 37 31 33 37 39 65 63 30 2D 37 38 36 38 2D 31 31 65 64 2D 62 39 66 61 2D 35 35 63 61 63 65 36 64 31 34 31 34 </StringToSignBytes>
</Error>
None

同时也尝试了postman和$.ajax使用put请求,发现都会返回403 SignatureDoesNotMatch

期望结果

curl, postman, $ajax访问都不会报错403

展开
收起
游客sh2kgus7rasds 2022-12-10 17:05:00 332 0
1 条回答
写回答
取消 提交回答
  • 你好,你的签名URL访问会报403错误SignatureDoesNotMatch,请按照以下步骤排查签名方式并重新生成签名URL:

    1. 请检查Endpoint前面没有Bucket,后面没有多余的“/”,前后没有多余的空格。
      • 比如下面的Endpoint是不合法的。 
        • http:// oss-cn-hangzhou.aliyuncs.com
        • https:// oss-cn-hangzhou.aliyuncs.com
        • http://my-bucket.oss-cn-hangzhou.aliyuncs.com
        • http://oss-cn-hangzhou.aliyuncs.com/
      • 合法的Endpoint如下。
        • http://oss-cn-hangzhou.aliyuncs.com
    2. 请确认AccessKeyID与AccessKeySecret正确,确保AccessKeyID与AccessKeySecret前后都没有空格,特别是使用了复制粘贴的情况。
    3. 请确保BucketName与ObjectKey命名合法有效且符合要求。
      • Bucket命名规范:只能包括小写字母、数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
      • Object的命名规范:使用UTF-8编码,长度必须在1-1023字节之间,不能以“/”或者“\”字符开头。
    4. 如果是您自己实现的签名,请使用OSS SDK提供的签名方法。OSS的SDK提供了URL/Header签名的实现,详细请参看授权访问
    5. 如果您的环境不适合使用SDK,需要自己实现签名,签名方法请参考发起请求概述,仔细检查每个签名字段。
    6. 如果您使用了代理,请检查代理服务器是否添加额外的Header。

    更多信息,请参见OSS权限相关常见错误的排查方法

    2022-12-12 10:35:31
    赞同 展开评论 打赏

对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。

相关产品

  • 对象存储
  • 相关电子书

    更多
    OSS运维进阶实战手册 立即下载
    《OSS运维基础实战手册》 立即下载
    OSS运维基础实战手册 立即下载