723
微信
请求签名机制__调用方式_API使用手册_消息服务-阿里云
Access Key ID和Access Key Secret 由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中 Access Key ID 用于标识访问者的身份;Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。
MNS 服务会对每个访问的请求进行验证,每个向 MNS 提交的请求,都需要在请求中包含签名(Signature)信息。MNS 通过使用 Access Key ID 和 Access Key Secret 进行对称加密的方法来验证请求的发送者身份。如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,MNS 将拒绝处理这次请求,并返回 HTTP 403 错误。
用户可以在 HTTP 请求中增加 Authorization(授权)的 Head 来包含签名信息,表明这个消息已被授权。
MNS 要求将签名包含在 HTTP Header 中,格式如下:
Authorization: MNS AccessKeyId:Signature
Signature计算方法如下:
Signature = base64(hmac-sha1(VERB + "n"
+ CONTENT-MD5 + "n"
+ CONTENT-TYPE + "n"
+ DATE + "n"
+ CanonicalizedMNSHeaders
+ CanonicalizedResource))
VERB
表示HTTP的Method(如示例中:PUT)Content-Md5
表示请求内容数据的MD5值CONTENT-TYPE
表示请求内容的类型DATE
表示此次操作的时间,不能为空,目前只支持GMT格式,如果请求时间和MNS服务器时间相差超过15分钟,MNS会判定此请求不合法,返回400错误,错误信息及错误码详见本文档第5部分。(如示例中:Thu, 17 Mar 2012 18:49:58 GMT
)- CanonicalizedMNSHeaders表示 http中的x-mns-开始的字段组合。(见下文注意事项)
- CanonicalizedResource表示http所请求资源的URI(统一资源标识符)。(如示例中:
/queues/$queueName?metaOverride=true
)
注意:
CanonicalizedMNSHeaders(即
x-mns-
开头的head)在签名验证前需要符合以下规范:
- head的名字需要变成小写
- head自小到大排序
- 分割head name和value的冒号前后不能有空格
- 每个Head之后都有一个
n
,如果没有以x-mns-
开头的head,则在签名时CanonicalizedMNSHeaders就设置为空
其他:
- 用来签名的字符串为UTF-8格式。
- 签名的方法用RFC 2104。中定义的HMAC-SHA1方法,其中Key为AccessKeySecret。
- content-type和content-md5在请求中不是必须的,没有情况下,请使用
''
代替。
请求的示例如下:
PUT /queues/$queueName?metaOverride=true HTTP/1.1
Host: $AccountId.mns.cn-hangzhou.aliyuncs.com
Date: Wed, 08 Mar 2012 12:00:00 GMT
Authorization: MNS 15B4D3461F177624206A:xQE0diMbLRepdf3YB+FIEXAMPLE=
<?xml version="1.0" encoding="UTF-8" ?>
<Queue xmlns="https://mns.aliyuncs.com/doc/v1/">
<VisibilityTimeout >60</VisibilityTimeout>
<MaximumMessageSize>1024</MaximumMessageSize>
<MessageRetentionPeriod>120</MessageRetentionPeriod>
<DelaySeconds>30</DelaySeconds>
</Queue>
如果传入的AccessKey Id不存在或inactive,返回403 Forbidden。
返回示例:
Content-Type: text/xml
Content-Length: 314
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="utf-8"?>
<Error xmlns="https://mns.aliyuncs.com/doc/v1/">
<Code>AccessIDAuthError</Code>
<Message>
AccessID authentication fail, please check your AccessID and retry.
</Message>
<RequestId>512B2A634403E52B1956133E</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>
如果签名验证的时候,头中没有传入Date或者格式不正确,返回403 Forbidden错误。
返回示例:
Content-Type: text/xml
Content-Length: 274
Date: Wed, 18Mar 2012 08:04:06 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="UTF-8"?>
<Error xmlns="https://mns.aliyuncs.com/doc/v1/">
<Code>InvalidArgument</Code>
<Message>Date header is invalid or missing.</Message>
<RequestId>7E1A5CF258F535884403E533</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>
传入请求的时间必须在MNS服务器当前时间之后的15分钟以内,否则返回408超时。
返回示例:
Content-Type: text/xml
Content-Length: 283
Date: Wed, 11 May 2011 09:01:51 GMT
x-mns-request-id: 512B2A634403E52B1956133E
<?xml version="1.0" encoding="UTF-8"?>
<Error xmlns="https://mns.aliyuncs.com/doc/v1/">
<Code>TimeExpired</Code>
<Message>
The http request you sent is expired.
</Message>
<RequestId>512B2A634403E52B1956133E</RequestId>
<HostId>mns.cn-hangzhou.aliyuncs.com</HostId>
</Error>
最后更新:2016-11-23 17:16:04
上一篇:
返回结果__调用方式_API使用手册_消息服务-阿里云
下一篇:
Endpoint签名认证__调用方式_API使用手册_消息服务-阿里云
DRDS常见问题__常见问题_产品使用问题_分布式关系型数据库 DRDS-阿里云
配置相关___常见问题_产品使用问题_消息队列 MQ-阿里云
设备端SDK使用问题__产品常见问题_阿里云物联网套件-阿里云
在Header中包含签名__访问控制_API 参考_对象存储 OSS-阿里云
接口说明__API使用手册_归档存储-阿里云
什么是RAM?__产品简介_访问控制-阿里云
获取用户 Region 信息__用户管理相关接口_Open API_消息队列 MQ-阿里云
格式转换___图片处理指南_对象存储 OSS-阿里云
通过客户端加密保护数据__数据安全_最佳实践_对象存储 OSS-阿里云
强制干预__使用须知_用户指南_弹性伸缩-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云