您調用MNS HTTP API發送請求時,需要在Authorization header里帶上簽名值,當簽名值和服務器端計算的不一致時,請求會被拒絕,服務器返回403 SignatureDoesNotMatch。本文介紹報錯后如何進行檢查。

問題描述

調用MNS的API請求時報錯“403 SignatureDoesNotMatch”。

問題原因

通過MNS HTTP API發送請求時,需要在Authorization Header中加入簽名值,當簽名值和服務器端計算的不一致時,請求會被拒絕,服務器返回“403 SignatureDoesNotMatch”錯誤。

解決方案

請參考如下步驟進行排查。

  1. 檢查請求URL是否正確。詳情請參見API請求結構
  2. 檢查AccessKeyId和AccessKeySecret是否正確。您可以通過阿里云AK管理控制臺申請和管理AccessKeyId及AccessKeySecret。
  3. 通過請求簽名機制驗證您生成的簽名,確認簽名正確。
  4. 檢查請求中的參數是否符合規范,常見的錯誤如下。關于請求的規范,請參見請求簽名機制
    • 協議版本錯誤。新協議請參考請求結構
    • 日期格式錯誤。
    • x-mns-開頭的head不符合規范。

更多信息

此處以簽名Demo為例進行說明。
  1. 假設請求的HTTP header參數如下。
    GET /MyQueue HTTP/1.1
    Host: 1xxxx0.mns.cn-hangzhou.aliyuncs.com
    Date: Thu, 09 Jul 2015 03:01:34 GMT
    x-mns-version:2015-06-06
  2. 需要進行加密的簽名源字串如下。
    GET
    (換行符)
    (換行符)
    Thu, 09 Jul 2015 03:01:34 GMT
    x-mns-version:2015-06-06
    /MyQueue
  3. 假設AccessKeyId為TestAccessID,AccessKeySecret為TestAccessSecret,經過加密算法得出的簽名值。