您調用MNS HTTP API發送請求時,需要在Authorization header裡帶上籤名值,當簽名值和伺服器端計算的不一致時,請求會被拒絕,伺服器返回403 SignatureDoesNotMatch。本文介紹報錯後如何進行檢查。
問題描述
調用MNS的API請求時報錯“403 SignatureDoesNotMatch”。
問題原因
通過MNS HTTP API發送請求時,需要在Authorization Header中加入簽名值,當簽名值和伺服器端計算的不一致時,請求會被拒絕,伺服器返回“403 SignatureDoesNotMatch”錯誤。
解決方案
請參考如下步驟進行排查。
- 檢查請求URL是否正確。詳情請參見API請求結構。
- 檢查AccessKeyId和AccessKeySecret是否正確。您可以通過阿里雲AK管理主控台申請和管理AccessKeyId及AccessKeySecret。
- 通過請求籤名機制驗證您產生的簽名,確認簽名正確。
- 檢查請求中的參數是否符合規範,常見的錯誤如下。關於請求的規範,請參見請求籤名機制。
- 協議版本錯誤。新協議請參考請求結構。
- 日期格式錯誤。
- 以
x-mns-開頭的head不符合規範。
更多資訊
此處以簽名Demo為例進行說明。
- 假設請求的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 - 需要進行加密的簽名源字串如下。
GET (分行符號) (分行符號) Thu, 09 Jul 2015 03:01:34 GMT x-mns-version:2015-06-06 /MyQueue - 假設AccessKeyId為
TestAccessID,AccessKeySecret為TestAccessSecret,經過密碼編譯演算法得出的簽名值。