消费者调用API签名计算 本章节介绍消费者调用API签名计算 签名过程 客户端 1. 从原始请求中提取关键请求信息,构造签名字符串; 2. 利用加密算法和AppSecret对签名字符串进行加密处理,得到签名; 3. 将签名相关的头部信息加入到原始请求中,发送请求; 服务端 1. 从接收到的请求中提取关键请求信息,得到一个用来签名的签名串; 2. 从接收到的请求中读取APPKey,通过APPKey查询到对应的APPSecret; 3. 使用加密算法和APPSecret对关键请求信息签名串进行加密处理,得到签名; 4. 从接收到的请求中读取客户端签名,对比服务器端签名和客户端签名的一致性。 签名生成公式 签名的计算公式为signature HMACSHAxHEX(secretkey, signingstring),从公式可以看出,想要获得签名需要得到 secretkey 和 signingstring 两个参数。其中 secretkey 为对应应用所配置的,signingstring 的计算公式为 signingstring HTTP Method + n + HTTP URI + n + canonicalquerystring + n + accesskey + n + Date + n + signedheadersstring。如果 signingstring 中的某一项不存在,也需要使用一个空字符串代替。 字段解释 1. HTTP Method:指 HTTP 协议中定义的 GET、PUT、POST 等请求方法,必须使用全大写的形式。 2. HTTP URI:要求必须以“/”开头,不以“/”开头的需要补充上,空路径为“/”。 3. Date:请求头中的 Date ( GMT 格式 )。 4. canonicalquerystring:是对于 URL 中的 query( query 即 URL 中 ? 后面的 key1valve1&key2valve2 字符串)进行编码后的结果。 5. signedheadersstring:是从请求头中获取客户端指定的字段,并按顺序拼接字符串的结果。 其中canonicalquerystring 编码步骤如下: 提取URL 中的 query 项,即 URL 中 ? 后面的 key1valve1&key2valve2 字符串。 将query 根据&分隔符拆开成若干项,每一项是 keyvalue 或者只有 key 的形式。 当该项只有key 时,转换公式为 urlencode(key) + "" 的形式。 当该项是keyvalue 的形式时,转换公式为 urlencode(key) + "" + urlencode(value) 的形式。这里 value 可以是空字符串。 将每一项转换后,以key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 canonicalquerystring 。