獲取AKSK
更新時間 2025-04-02 20:27:01
最近更新時間: 2025-04-02 20:27:01
分享文章
本文簡述如何調用API獲取AKSK。
一、獲取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位隨機數。
3.構造Eop-Authorization 。按以下步驟進行:
3.1構造代簽字符串sigture 。
sigture = 需要進行簽名的Header排序后的組合列表+ " \n " + 排序的query + " \n " + toHex(sha256(原封的body))
| 步驟 | 構造請求頭的方法 |
|---|---|
| 需要進行簽名的Header排序后的組合列表 | 將ctyun-eop-request-id、eop-date以 “header_name:header_value”的形式、以“\n ”作為每個header的結尾符、以英文字母表作為header_name的排序依據將它們拼接起來。 注意:EOP強制要求ctyun-eop-request-id、eop-date必須進行簽名。其他字段是否需要簽名看自身需求。 例子(假設你需要將ctyun-eop-request-id、eop-date、host都要簽名): ctyun-eop-request-id:123456789\neop-date:20210531T100101Z\n |
| 排序的query | query以&作為拼接,key和值以=連接,排序規則使用26個英文字母的順序來排序,Query參數全部都需要進行簽名 |
| toHex(sha256(原封的body)) | 傳進來的body參數進行sha256摘要,對摘要出來的結果轉十六進制 |
sigture 示例1:
- 假設query 為空 、需要進行簽名的Header排序后的組合列表為“ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\n eop-date:20220525T160752Z \n**”、body參數做sha256摘要后轉十六進制為e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\n eop-date:20220525T160752Z \n\n\n**e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
sigture 示例2:
- 假設query 不為空 、需要進行簽名的Header排序后的組合列表為“ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\n eop-date:20220525T160752Z \n**”、body參數做sha256摘要后轉十六進制為e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- ctyun-eop-request-id:27cfe4dc-e640-45f6-92ca-492ca73e8680**\n eop-date:20220525T160930Z\n\n**aa=1&bb=2**\n**e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
3.2 構造動態秘鑰kdate。
3.2.1 使用eop-date作為數據,sk作為密鑰,算出ktime。
3.2.2 使用ak作為數據,ktime作為密鑰,算出kAk。
3.2.3 使用eop-date的年月日值作為數據,kAk作為密鑰,算出kdate。
| 步驟 | 構造動態密鑰的方法 |
|---|---|
| eop-date | yyyymmddTHHMMSSZ(20211221T163614Z)(年月日T時分秒Z) |
| Ktime | 使用eop-date作為數據,sk作為密鑰,算出ktime。 Ktime = hmacSha256(eop-date,sk) |
| kAk | 使用ak作為數據,ktime作為密鑰,算出kAk。 kAk = hmacsha256(ak,ktime) |
| kdate | 使用eop-date的年月日值作為數據,kAk作為密鑰,算出kdate。 kdate = hmacsha256(eop-date,kAk) |
3.3 構造Signature 。使用kdate作為密鑰、sigture作為數據,將其得到的結果進行base64編碼得出Signature
| 步驟 | 構造簽名的方法 |
|---|---|
| Signature | 1)hmacsha256(sigture,kdate) 2)將上一步的結果進行base64加密得出Signature |
3.4 構造Eop-Authorization。
3.4.1 構造Headers。
3.4.2得到Eop-Authorization。
Eop-Authorization:ak Headers=xxx
Signature==xxx
| 步驟 | 構造Eop-Authorization的方法 |
|---|---|
| Headers | 將需要進行簽名的請求頭字段以 “header_name”的形式、以“;”作為間隔符、以英文字母表作為header_name的排序依據將它們拼接起來。 例如(假設你需要將ctyun-eop-request-id、eop-date都要簽名):Headers= ctyun-eop-request-id;eop-date |
| Eop-Authorization | Eop-Authorization:ak Headers=xxx Signature=xxx。注意,ak、Headers、Signature之間以空格隔開。 例如:Eop-Authorization:ak Headers=ctyun-eop-request-id;eop-date Signature=NlMHOhk5bVfZ9MwDSSJydcZjjENmDtpNYigJGVb 注意:如果你需要進行簽名的Header不止默認的ctyun-eop-request-id和eop-date,那么你需要在http_client的請求頭部中加上,并且Eop-Authorization中也需要增加 |
三、 簽名示例
