您調用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
,經過加密算法得出的簽名值。