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-阿裏雲