签名机制

最近更新时间:2020-07-09 15:53:36

为保证API的安全调用,在调用API时云市场会对每个API请求通过签名(signature)进行身份验证,防止内容在传递过程中被伪造或篡改。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。

假设accessKey=123, secretKey=abc

1)根据请求参数(公共参数和业务参数,不包含公共参数signature)构造规范化请求字符串CanonicalizedQueryString

如:

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编码规则如下:

对于字符A~Z、a~z、0~9以及字符“-”、“_”、“.”和“~”不编码。

对于其他字符编码成%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

2)计算签名。

sign = hash_hmac('sha256', CanonicalizedQueryString, secretKey)

计算签名时使用的key是accessKey对应的secretKey。

使用的哈希算法是:HMAC-SHA256。

签名样例:

9f3b8a2cdf5d99ccd2c93829706ac2bc55d7cacd994f9114c7f1d5bff7da5583

3)将签名值作为signature参数值添加到请求参数中。

如:

accessKey=123&action=createInstance&p1=1&p2=2&p3=2&p4=%E4%B8%AD%E5%9B%BD&signature=9f3b8a2cdf5d99ccd2c93829706ac2bc55d7cacd994f9114c7f1d5bff7da5583

金山云,开启您的云计算之旅

免费注册