具体应用可参考调用示例。
信息的获取
获取AccessKey(ak)和SecurityKey(sk):
登录天翼云门户,在“控制台”->“账号中心”->“安全设置”->“登录保护”->“用户AccessKey”点击“查看”获取。
注意:SecurityKey信息只在创建的时候展示,请务必留存好信息。
Eop-Authorization签名认证信息:
可参考调用示例Python3调用示例、Java调用示例
步骤一:构造代签字符串 sigture
sigture = 需要进行签名的Header排序后的组合列表+ " \n " + encode的query + " \n " + toHex(sha256(原封的body))
| 名称 | 描述 |
|---|---|
| 需要进行签名的header排序后的组合列表(排序的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 |
| encode的query | query以&作为拼接,key和value以=连接,值需要encode,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
步骤二:构造动态秘钥 kdate
- 使用eop-date作为数据,sk作为密钥,算出ktime。
- 使用ak作为数据,ktime作为密钥,算出kAk。
- 使用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 |
步骤三:构造 signature
使用kdate作为密钥、sigture作为数据,将其得到的结果进行base64编码得出signature
| 名称 | 描述 |
|---|---|
| signature | hmacsha256(sigture,kdate)将上一步的结果进行base64加密得出signature |
步骤四: 构造 Eop-Authorization
- 构造Headers。
- 得到Eop-Authorization。
Eop-Authorization:ak Headers=xxx Signature==xxx。
| 名称 | 描述 |
|---|---|
| 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中也需要增加 |