日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

0002-00000040

問題描述

使用OSS的API接口或SDK時,提示“SignatureDoesNotMatch”簽名報錯。

<?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>LTAI******** </OSSAccessKeyId>
  <SignatureProvided>tPN3LTAI******** </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服務端進行身份認證。如果服務器返回如上所示的響應,說明您在請求中提供的簽名與服務端計算的不一致,導致請求被拒絕。

問題示例

  • 通過微信小程序請求OSS返回簽名失敗,通過瀏覽器請求OSS返回簽名正常。

  • 請求到達OSS之前經過了客戶端代理,且客戶端代理對簽名后的請求進行了修改,例如增加了新的請求頭。

  • 使用CDN域名發起Head請求時,CDN把Head請求默認轉為了Get請求。

    HEAD /ObjectName?objectMeta HTTP/1.1
    Host: your.cdn.com
    Date: Fri, 24 Feb 2012 06:38:30 GMT
    Authorization: OSS qn6q**************:77Dv****************
  • 通過CDN配置x-oss-range-behavior: standard請求頭用于修改OSS Range回源,OSS在計算簽名時將所有帶x-oss-前綴的請求頭加入計算。

  • Endpoint使用了CNAME域名,但初始化時沒有打開CNAME開關。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\OssClient;
    use OSS\Core\OssException;
    $accessKeyId = getenv("OSS_ACCESS_KEY_ID");
    $accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
    $endpoint = "https://your.cname.com";
    
    try {
        // Endpoint使用了CNAME域名,但初始化時沒有打開CNAME開關。
        $isCNAME = false;
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, $isCNAME);
    } catch (OssException $e) {
        print $e->getMessage();
    }
  • 計算的簽名中包含了加號(+),沒有進行URL編碼。

    GET /oss.jpg?OSSAccessKeyId=nz2p**********&Expires=1141889120&Signature=ab+cd HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 24 Feb 2012 06:38:30 GMT

解決方案

請求出現簽名報錯時,請參考以下步驟進行排查。

  1. 確認簽名所用的AccessKey ID與AccessKey Secret是否填寫正確。

    您可以使用AccessKey ID與AccessKey Secret登錄ossbrowser來驗證正確性。具體步驟,請參見安裝并登錄ossbrowser。

  2. 檢查簽名算法是否正確。

    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發起請求概述

  3. 比對響應體中的StringToSign字段與您發起請求的內容是否存在差異。

    StringToSign字段表示待簽字符串,即簽名算法中需要使用AccessKey Secret進行加密的內容。

    請求示例如下:

    PUT /bucket/abc?acl
    Date: Wed, 24 May 2023 02:12:30 GMT
    Authorization: OSS qn6q**************:77Dv****************
    x-oss-abc: mymeta

    以上請求計算得到的待簽字符串應為:

    PUT\n\n\nWed, 24 May 2023 02:12:30 GMT\nx-oss-abc:mymeta\n/bucket/abc?acl
  4. 排查簽名錯誤原因后,根據不同簽名錯誤場景,選擇對應的解決方法。

    簽名錯誤場景示例

    解決方法

    微信小程序請求OSS返回簽名失敗,通過瀏覽器請求OSS返回簽名正常。

    參考步驟3比對響應體中的StringToSign字段,查看微信小程序發起的請求是否攜帶了額外的Content-Type字段。如果請求中攜帶了Content-type,則signature計算也要加上Content-type。

    客戶端代理修改了簽名后的請求。

    參考步驟3比對響應體中的StringToSign字段與您發起請求的內容是否存在差異。

    通過CDN域名發起Head請求,CDN默認將Head請求自動轉為Get請求。

    • 使用OSS默認域名發起Head請求。

    • 配置自定義回源頭。

      默認情況下,您發起的Head請求經過阿里云CDN節點之后再訪問源站時,會被自動轉換為Get請求方式。如果您希望保持Head請求回源的方式,您可以按以下要求配置自定義回源頭。具體操作,請參見配置回源HTTP請求頭(舊版)。

        • 自定義參數:Ali-Swift-Fwd-Head。

        • 取值:on

        重要

        該操作會針對全域名生效,需要慎重選擇。

    CDN添加了新的請求頭x-oss-range-behavior: standard。

    您需要在客戶端發起請求時,將x-oss-range-behavior: standard請求頭加入簽名計算。

    使用自定義域名請求OSS時,未打開CNAME開關。

    通過Java SDK打開CNAME開關的方式為setSupportCname(true)。

    關于其他語言SDK打開CNAME開關的說明,請參見SDK簡介

    URL簽名中簽名計算結果包含加號(+)。

    對簽名進行URL編碼后再發起請求。

    GET /oss.jpg?OSSAccessKeyId=nz2p**********&Expires=1141889120&Signature=ab%2Bcd HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 24 Feb 2012 06:38:30 GMT