完整的EOP请求,除了业务参数以外,还必须在请求头中包含以下鉴权信息:
ctyun-eop-request-id:请求IDeop-date:请求时间Eop-Authorization:构造的鉴权头(关键)
下面说明具体的签名生成流程。
一、准备工作
获取密钥:登录天翼云控制台 → 账号中心 → 安全设置 → 用户AccessKey,获取
ctyun-eop-ak和ctyun-eop-sk。生成时间:请求时间
eop-date必须为北京时区的当前时间,格式为YYYYMMDDTHHMMSSZ(如:20211221T163614Z)。请求ID:每个请求都必须有一个唯一的
ctyun-eop-request-id,推荐用UUID生成。
二、签名生成流程(4步完成)
步骤1:构造待签名字符串
待签字符串由三部分构成:“需要签名的header参数”、“查询参数(如果有)”、“请求体(如果有)”,通过"\n"连接。
待签名字符串 = 排序后的请求头 + "\n" + 排序后的查询参数 + "\n" + 请求体SHA256哈希值具体操作:
请求头处理:必须包含
ctyun-eop-request-id和eop-date,按header名称字母顺序排序。header1:value1\nheader2:value2\nheader3:value3查询参数处理:按参数名字母顺序排序,用
&连接。param1=value1¶m2=value2请求体处理:对原始请求体进行SHA256哈希,转为16进制字符串。
步骤2:构造动态密钥
使用 HMAC-SHA256 算法,进行链式计算,生成动态密钥。HMAC-SHA256(key, data) 表示使用密钥 key 对数据 data 进行 HMAC-SHA256 计算。
ktime = HMAC-SHA256(ctyun-eop-sk, eop-date)
kAk = HMAC-SHA256(ktime, ctyun-eop-ak)
kdate = HMAC-SHA256(kAk, eop-date的前8位日期)步骤3:计算最终签名
signature = Base64(HMAC-SHA256(kdate, 待签名字符串))步骤4:构造授权头
Eop-Authorization: {ctyun-eop-ak} headers={参与签名的header列表} Signature={signature}三、完整请求示例
GET https://kqa-global.ctapi.ctyun.cn/openapi/v1/categorys/detail HTTP/1.1
Host: https://kqa-global.ctapi.ctyun.cn
eop-date: 20211221T163614Z
ctyun-eop-request-id: 123456789
Eop-Authorization: ctyun-eop-ak headers=ctyun-eop-request-id;eop-date Signature=xad01/ada四、关键要点
时间格式:
eop-date必须为YYYYMMDDTHHMMSSZ格式(如:20211221T163614Z)。注意计算kdate时,只使用eop-date的前8位日期。字母排序:所有参与签名的元素都必须按字母顺序排列。
必须字段:
ctyun-eop-request-id和eop-date是必填签名头。签名有效期:建议每次请求都重新生成签名。
注意事项:
参与签名的header、query、body参数,在计算签名前后不能更改(包括空格、换行等),否则会导致签名错误。报错CTAPI_10009。