一、獲取AKSK
- 登錄CDN+ IAM,地址: 。
- 在個人中心AccessKey管理頁面,點擊新增按鍵。

- 選擇對應的工作區并確定,此時你可以查看到AccessKey已生成。


- 選中密鑰,點擊查看。為保障安全,需要填寫手機驗證碼。驗證通過后,點擊顯示SK,即可查看詳情,并支持復制和發送郵箱操作。

二、在http_client的請求頭增加3個字段,分別是eop-date、ctyun-eop-request-id、Eop-Authorization。
1.構造eop-date 。該字段的格式是“yyyymmddTHHMMSSZ”,即:年月日T時分秒Z”,示例:eop-date:20211221T163614Z。
2.構造ctyun-eop-request-id 。該字段是uuid,32位隨機數。示例:27cfe4dc-e640-45f6-92ca-492ca73e8680
3.構造Eop-Authorization 。按以下步驟進行:
步驟一:構造代簽字符串sigture 。
sigture = 需要進行簽名的Header排序后的組合列表+ " \n " + 排序的query + " \n " +toHex(sha256(原封的body))
1)需要進行簽名的Header排序后的組合列表:將ctyun-eop-request-id、eop-date以 “header_name:header_value”的形式、以“\n ”作為每個header的結尾符、以英文字母表作為header_name的排序依據將它們拼接起來。
注意注意:EOP強制要求ctyun-eop-request-id、eop-date必須進行簽名。其他字段是否需要簽名看自身需求。
2)排序的query:query以&作為拼接,key和值以=連接,排序規則使用26個英文字母的順序來排序,Query參數全部都需要進行簽名
3)toHex(sha256(原封的body)):傳進來的body參數進行sha256摘要,對摘要出來的結果轉十六進制
示例1:
假設query 為空 ,原封body內容:{"product_code": "008", "tag_group": "Ypp-group_1702950925", "tag": "1702950925-yPP_tag-1"}
需要進行簽名的Header排序后的組合列表為:
1)ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680
2)eop-date:20220525T160752Z
3)body參數做sha256摘要后轉十六進制為:59fc6acc115298cbac86cb188f995f7804ff6633a6d6e87acab7a9131bdabc66
則sigture為:
ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680\neop-date:20220525T160752Z\n\n\n59fc6acc115298cbac86cb188f995f7804ff6633a6d6e87acab7a9131bdabc66
示例2:
假設query 為:aa=1&bb=2 ,原封body內容為空
需要進行簽名的Header排序后的組合列表為:
1)ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680
2)eop-date:20220525T160752Z
3、body參數做sha256摘要后轉十六進制為:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
則sigture為:
ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680\neop-date:20220525T160930Z\n\naa=1&bb=2\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
步驟二:構造動態秘鑰kdate 。
1)eop-date:yyyymmddTHHMMSSZ(20211221T163614Z)(年月日T時分秒Z)
2)Ktime:使用eop-date作為數據,sk作為密鑰,算出ktime。 Ktime = hmacSha256(eop-date,sk)
3)kAk:使用ak作為數據,ktime作為密鑰,算出kAk。 kAk = hmacsha256(ak,ktime)
4)kdate:使用eop-date的年月日值作為數據,kAk作為密鑰,算出kdate。 kdate = hmacsha256(eop-date,kAk)
步驟三: 構造Signature 。使用kdate作為密鑰、sigture作為數據,將其得到的結果進行base64編碼得出Signature
Signature構造簽名的方法:
1)hmacsha256(sigture,kdate)
2)將上一步的結果進行base64加密得出Signature
步驟四:構造Eop-Authorization 。
1)Headers:將需要進行簽名的請求頭字段以 “header_name”的形式、以“;”作為間隔符、以英文字母表作為header_name的排序依據將它們拼接起來。 假設需要將ctyun-eop-request-id、eop-date進行簽名,則Headers= ctyun-eop-request-id;eop-date。
2)Eop-Authorization值為:ak Headers=xxx Signature=xxx。
注意ak、Headers、Signature之間以空格隔開。 例如:Eop-Authorization:ak Headers=ctyun-eop-request-id;eop-date Signature=Zq0Wodhwa7ShCKhQWy49MoOm3r6/tB1rBTlp+vjRkSY=
如果需要進行簽名的Header不止默認的ctyun-eop-request-id和eop-date,那么需要在http_client的請求頭部中加上,并且Eop-Authorization中也需要增加。
三、 簽名示例
{
"host": "cdnapi-global.ctapi.daliqc.cn",
"Eop-date": "20211221T163614Z",
"ctyun-eop-request-id": "27cfe4dc-e640-45f6-92ca-492ca73e8680",
"Eop-Authorization": "e3e86563b0548543c128bcd2ea998167 Headers=ctyun-eop-request-id;eop-date Signature=Zq0Wodhwa7ShCKhQWy49MoOm3r6/tB1rBTlp+vjRkSY=",
"Content-Type": "application/json;charset=UTF-8"
}