开发者社区> 问答> 正文

【OSS】在Centos机器上调用SDK中的分片上传函数正常,但在Ubuntu机器上总是报403错误

已解决

在Centos机器上调用SDK中的分片上传函数正常,但在Ubuntu机器上总是报403错误。是什么原因?

展开
收起
云上猫猫 2022-01-19 16:59:14 4625 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    客户端部署tcpdump抓包,然后通过tcp报文排查是否由于Header信息不正确导致计算签名与服务端不匹配。

    POST /ttsservice%2Fpasswd?uploadId=D468E486D1D94D90A1AB8885A4E32AE0 HTTP/1.1
    Host: rokid.oss-cn-hangzhou.aliyuncs.com
    Accept-Encoding: identity
    Accept: text/html
    Content-Length: 137
    date: Sat, 29 Dec 2018 07:32:34 GMT
    authorization: OSS LTAIknFr:r2KPR0y4E0G5tnU/MYdcvXHP****
    Content-Type: application/x-www-form-urlencoded
    User-Agent: aliyun-sdk-python/2.6.0(Linux/4.4.0-31-generic/x86_64;3.4.3)
    
    <CompleteMultipartUpload><Part><PartNumber>1</PartNumber><ETag>"3195544E19D99658706D5****"</ETag></Part></CompleteMultipartUpload>HTTP/1.1 403 Forbidden
    
    Server: AliyunOSS
    Date: Sat, 29 Dec 2018 07:33:43 GMT
    Content-Type: application/xml
    Content-Length: 1122
    Connection: keep-alive
    x-oss-request-id: 5C2723573183****
    x-oss-server-time: 0
    
    <?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> 5C2723573183A12D </RequestId>
     <HostId>rokid.oss-cn-hangzhou.aliyuncs.com</HostId>
     <OSSAccessKeyId> LTAXXX </OSSAccessKeyId>
     <SignatureProvided>r2KPR0y4E0G5tnU/MYdc****</SignatureProvided>
     <StringToSign>POST
    application/x-www-form-urlencoded
    Sat, 29 Dec 2018 07:32:34 GMT
    /rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****</StringToSign>
     <StringToSignBytes>50 4F 53 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 53 61 74 2C 20 32 39 20 44 65 63 20 32 30 31 38 20 30 37 3A 33 32 3A 33 34 20 47 4D 54 0A 2F 72 6F 6B 69 64 2D 6F 70 73 2D 6D 6F 64 65 6C 2F 74 74 73 73 65 72 76 69 63 65 2F 70 61 73 73 77 64 3F 75 70 6C 6F 61 64 49 64 3D 44 34 36 38 45 34 38 36 44 31 44 39 34 44 39 30 41 31 41 42 38 38 38 35 41 34 45 33 32 41 45 30 </StringToSignBytes>
    </Error>
    

    如果服务端收到的签名(Signature)和客户端计算的签名信息不一致,说明请求的内容已被改动,建议使用HTTPS的方式上传。

    以上是客户端抓取的报文信息。请将获取的请求头信息带入以下脚本,并将计算结果与SDK进行比较。

    import base64
    import hmac
    import sha
    mac = hmac.new("<Secretkey>","POST\n\napplication/x-www-form-urlencoded\nSat, 29 Dec 2018 07:32:34 GMT\n/rokid/ttsservice/passwd?uploadId=D468E486D1D94D90A1AB8885A4E3****", sha)
    Signature = base64.b64encode(mac.digest())
    print(Signature)
    

    如果抓包数据和脚本计算的结果一致,则说明SDK计算正确。如果抓包数据和脚本计算的结果不一致,可能是因为SDK在Ubuntu平台编译的适配问题导致MD5值不一样。

    2022-01-19 17:01:25
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
一个跨平台的云服务SDK需要什么 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载