您调用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,经过加密算法得出的签名值。