信息的獲取
云網平臺獲取
登錄云網門戶,在“控制臺”->“賬(zhang)號(hao)中心”->“安全設置”->“用(yong)戶AccessKey”點擊(ji)“查(cha)看”獲取。



基本簽名流程
ctyun-eop-ak/ctyun-eop-sk基本簽名(ming)流(liu)程:
- 待簽字符串:使用規范請求和其他信息創建待簽字符串。
- 計算密鑰:使用header、ctyun-eop-sk、ctyun-eop-ak來創建hmac算法的密鑰。
- 計算簽名:使用第三步的密鑰和待簽字符串在通過hmacsha256來計算簽名。
- 簽名應用:將生成的簽名信息作為請求消息頭添加到HTTP請求中。
創建待簽名字符串
待(dai)簽名字符串(chuan)的(de)構(gou)造規則如(ru)下:
待簽名字符串(chuan)=需要進行簽名的header排序(xu)后的組合列表+ "\n" + 排序(xu)的query + "\n" + toHex(sha256(原封的body))
| 需要進行簽名的header排序后的組合列表(排序的header) | header 以 header_name:header_value來一個一個通過\n拼接起來,EOP是強制要求ctyun-eop-request-id和eop-date這個頭作為header中的一部分,并且必須是待簽名header里的一個。需要進行簽名算法的header需要進行排序(將它們的header_name以26個英文字母的順序來排序),將排序后得到的列表進行遍歷組裝成待簽名的header。 |
|---|---|
| 排序的query | query以&作為拼接,key和值以=連接,排序規則使用26個英文字母的順序來排序,Query參數全部都需要進行簽名 |
| toHex(sha256(原封的body)) | 傳進來的body參數進行sha256摘要,對摘要出來的結果轉十六進制 |
排序(xu)的header例子:
- 假設你需要將ctyun-eop-request-id、eop-date、host都要簽名,則待簽名的header構造出來是:
ctyun-eop-request-id:123456789\neop-date:20210531T100101Z\nhost:1.1.1.1:9080\n
ctyun-eop-request-id、eop-date和(he)host的排(pai)序(xu)就(jiu)是(shi)這(zhe)個(ge)順序(xu)。
- 如果你加入一個ccad的header,同時這個header也要是進行簽名,則待簽名的header組合:
ccad:123\nctyun-eop-request-id:123456789\neop-date:20210531T100101Z\nhost:1.1.1.1:9080\n
構造動態密鑰
發起請求時(shi),需要(yao)構造(zao)一個(ge)eop-date的(de)時(shi)間,這個(ge)時(shi)間的(de)格式是(shi)yyyymmddTHHMMSSZ。言簡意賅一些,就是(shi)年月日T時(shi)分秒Z。
- 先是拿你申請來的ctyun-eop-sk作為密鑰,eop-date作為數據,算出ktime。
- 拿ktime作為密鑰,你申請來的ctyun-eop-ak數據,算出kAk。
- 拿kAk作為密鑰,eop-date的年月日值作為數據,算出kdate。
| eop-date | yyyymmddTHHMMSSZ(20211221T163614Z)(年月日T時分秒Z) |
|---|---|
| Ktime | 使用ctyun-eop-sk作為密鑰,eop-date作為數據,算出ktime;Ktime = hmacSha256(ctyun-eop-sk, eop-date) |
| kAk | 使用ktime作為密鑰,你申請來的ctyun-eop-ak數據,算出kAk;kAk = hmacsha256(ktime,ctyun-eop-ak) |
| kdate | 使用kAk作為密鑰,eop-date的年月日值作為數據;算出kdate;kdate = hmacsha256(kAk, eop-date) |
簽名應用及示例
由“構造動態密鑰(yao)”和“創建待(dai)簽名字(zi)符串”分別得出來的待(dai)簽名字(zi)符串string_signature、kdate生成出Signature。
| Signature | 待簽名字符串string_signature、kdate;再根據hmacsha256(kdate,string_signature)得出的結果,再將結果進行base64編碼得出Signature |
|---|---|
| Eop-Authorization | {ctyun-eop-ak} headers=你構造待簽名字符串時的header排序 Signature={Signature}(ctyun-eop-ak后及Signature前都有一個空格)header排序以分號”;”拼接例子:你待簽名的字符串header順序是 eop-date和host;那么你加到header里的值就是Eop-Authorization: {ctyun-eop-ak} headers=eop-date;host Signature=xad01/ada |
由上得到Eop-Authorization,然后將(jiang)數據(ju)整合成header放在http_client內,發出即(ji)可。
http_client所需(xu)請求頭部如下:
Eop-Authorization: ctyun-eop-ak headers=ctyun-eop-request-id;eop-date Signature=xad01/ada
eop-date:20211221T163614Z
ctyun-eop-request-id: 123456789
注意若需(xu)要進(jin)行簽名(ming)的(de)header不止(zhi)默認的(de)ctyun-eop-request-id和eop-date,需(xu)要在http_client的(de)請(qing)求頭部中(zhong)加(jia)上,并(bing)且(qie)Eop-Authorization中(zhong)也需(xu)要增(zeng)加(jia)。