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