为保证API的安全调用,在调用API时云市场会对每个API请求通过签名(signature)进行身份验证,防止内容在传递过程中被伪造或篡改。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。
假设accessKey=123, secretKey=abc
如:
p1=1,p2=2,p3=3,p4=中 国 人-_.~123abc,accessKey=123,action=createInstance
**第一步:**请求参数排序。排序规则以参数名按照字典排序。
排序后结果为:
accessKey=123,action=createInstance,p1=1,p2=2,p3=3,p4=中 国 人-_.~123abc
*第二步:请求参数编码。使用UTF-8字符集对每个请求参数的*名称*和*参数****取值进行URL编码,URL编码规则如下:
对于字符AZ、az、09以及字符“-”、“_”、“.”和“”不编码。
对于其他字符编码成%XY的格式,其中XY是字符对应ASCII码的16进制。示例:半角双引号(")对应 %22。
在URLEncode后需对三种字符替换:加号(+)替换成 %20、星号(*)替换成 %2A、 %7E 替换回波浪号(~)
**第三步:**使用等号(=)连接编码后的请求参数和参数取值。
**第四步:**使用与号(&)连接编码后的参数,
得到规范化请求字符串CanonicalizedQueryString。
如:
accessKey=123&action=createInstance&p1=1&p2=2&p3=3&p4=%E4%B8%AD%20%E5%9B%BD%20%E4%BA%BA-_.~123abc
sign = hash_hmac(‘sha256’, CanonicalizedQueryString, secretKey)
计算签名时使用的key是accessKey对应的secretKey。
使用的哈希算法是:HMAC-SHA256。
签名样例:
9f3b8a2cdf5d99ccd2c93829706ac2bc55d7cacd994f9114c7f1d5bff7da5583
如:
accessKey=123&action=createInstance&p1=1&p2=2&p3=2&p4=%E4%B8%AD%E5%9B%BD&signature=9f3b8a2cdf5d99ccd2c93829706ac2bc55d7cacd994f9114c7f1d5bff7da5583
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!