您调用MNS HTTP API发送请求时,需要在Authorization header里带上签名值,当签名值和服务器端计算的不一致时,请求会被拒绝,服务器返回403 SignatureDoesNotMatch。本文介绍报错后如何进行检查。

当遇到这种问题,请检查以下几项:

  1. 请求URL是否正确。

    以ReceiveMessage(curl)为例:

    curl -X GET http://44404.mns.cn-beijing.aliyuncs.com/queues/queue1/messages?waitseconds=10 -H "Authorization:MNS ijljkhkhlkjklshiojo................." -H "Date:Mon, 09 Nov 2015 06:24:41 GMT" -H "x-mns-version:2015-06-06"

    • 新协议(x-mns-version:2015-06-06, Authorization:MNS xxxxxxxx)URL为:

      http://$AccountID.mns.cn-beijing.aliyuncs.com/queues/$queueName/messages

    • 旧协议(x-mqs-version:2014-07-08, Authorization:MQS xxxxxxxx)URL为:

      http://$AccountID.mns.cn-beijing.aliyuncs.com/$queueName/messages

    新旧协议更多差异,请参见API参考

    队列地址中的Account ID即云账户的账号ID。accountid
  2. AccessKeyId和AccessKeySecret是否正确。
  3. 加密信息源是否正确。

    下文给出常见的错误信息源例子。

    • 错误一:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Date:Thu, 21 May 2015 03:50:03 GMT
      x-mqs-version:2014-07-08
      
      /queue1/messages?waitseconds=10
    • 正确一:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Thu, 21 May 2015 03:50:03 GMT
      x-mqs-version:2014-07-08
      
      /queue1/messages?waitseconds=10

      解决方法:去掉“Date:”。

    • 错误二:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Thu, 21 May 2015 03:50:03 GMT
      x-mns-version:2015-06-06
      
      /queue1/messages?waitseconds=10
    • 正确二:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Thu, 21 May 2015 03:50:03 GMT
      x-mns-version:2015-06-06
      
      /queues/queue1/messages?waitseconds=10

      解决方法:如果使用新协议,请使用新协议支持的请求格式。

    • 错误三:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Thu, 21 May 2015 03:58:23 GMT
      \n
      
      /queues/queue1/messages?waitseconds=10
    • 正确三:
      GET
      
      \n
      
      text/xml;charset=utf-8
      Thu, 21 May 2015 03:58:23 GMT
      
      
      /queues/queue1/messages?waitseconds=10

      解决方法:如果没有以x-mns-开头的head,直接置为空,没有\n。

Signature计算方法,请参见请求签名机制

官网提供了一个Demo,方便用户验证自己的签名过程是否正确,请参见MNS常见问题中的问题为什么我的签名总是没算对?

如果问题还未能解决,请联系售后技术支持