请求签名校验

at 5年前  ca 架构  pv 243  by touch  

请求签名校验

如果基础服务使用了基于请求签名校验的接口安全校验规则,则在构造 HTTP 请求时,需要携带本次请求的签名信息。

请求签名不正确、或短时间内重复使用的请求签名,将被认为是非法请求。

具体做法分为 无 AppKey有 AppKey 的两种,均需要在请求的查询字符串中携带一个键为 signature 的参数。下面将分情况给出该参数值的计算规则。


对于无 AppKey 的接口

  1. 将本次请求中所有的查询字符串设为集合 M

  2. 将集合 M 内值为非空的参数,按照参数名的 ASCII 码从小到大排序;

  3. 将排序后的结果,以 URL 键值对的格式(形如 key1=value1&key2=value2...),拼接成字符串 S。需要注意的是,在拼接字符串时,请忽略名为 signature 的参数,或以下划线 _ 开头的参数(这是因为某些 JavaScript 库,会在 AJAX 请求结尾添加随机参数来防止缓存);

  4. 对上一步得到的字符串 S 做 SHA-1 运算,再将得到的结果转换为小写形式,得到字符串 R

  5. 将字符串 R 作为签名值,拼接到本次请求的查询字符串中。

下面给出几个有效的请求签名,以供业务方参考:

/user?keyword=昵称&limit=10&page=1&signature=7efa52fd38b40d5e3de673fa2aa5797fa42ee904

/bill?user_id=&date=20171108&_v=1&signature=acab68fec52e1e4da40d967797affb5a6285c15b

/course/users?course_id=3587&nonce=zx8n8can37dma8j&timestamp=1525371850&signature=71dea10fc7735b11b66b417874fa3a6e6e50fe52



对于有 AppKey 的接口

基础服务会为业务方颁发一对 AppKey / AppSecret,以便对业务方的 API 调用进行认证管理,请业务方妥善保管好该对标识和密钥。

  1. 在本次请求的查询字符串中添加一个键为 app_key、值为前文提到过的 AppKey 的参数;

  2. 无 AppKey 计算请求签名步骤的 1 - 3 步骤相同,得到排序拼接后的字符串 S

  3. 对上一步得到的字符串 S 做以该 AppKey 对应的 AppSecret 为密钥的 HMAC-SHA1 运算,再将得到的结果转换为小写形式,得到字符串 R

  4. 将字符串 R 作为签名值,拼接到本次请求的查询字符串中。

下面给出几个有效的请求签名,以供业务方参考:

/**
 * AppKey: cqhkaetmhrwpnqti  
 * AppSecret: a0a3d735506311d8ec84791ebd220d6c0b31f286  
 */ 
 /user?app_key=cqhkaetmhrwpnqti&keyword=昵称&limit=10&page=1&signature=d35b906baf353ddd45955b749964d118f8d90d70

/**  
* AppKey: zxozunarpzgmrzeh  
* AppSecret: 0h4lpx05ccqkuucrh7bymamcpeymdsrc  
*/ 
/bill?app_key=zxozunarpzgmrzeh&user_id=&date=20171108&_v=1&signature=8c31b351a7b3dd4da9a6d62347602f59aa6fd27d

/**  
* AppKey: pecxcvcytgxkfvgl  
* AppSecret: axswwlhr35gkq3ef85ev0rgpni01wcpl  
*/ 
/course/users?app_key=pecxcvcytgxkfvgl&course_id=3587&nonce=zx8n8can37dma8j&timestamp=1525371850&signature=75ea0f20be509cdaa9c9a21ae218dc770721c935



补充说明

  • 建议在计算请求签名前,先在该请求的查询字符串中添加一个键为 nonce、值为不定长随机字符串的参数(也可自行增加其他干扰项参数),以防止因查询字符串相同造成的签名碰撞。

  • 在计算签名的过程中,如果被签名的参数中包含非 ASCII 字符,请不要对它们进行 URL 编码或转义,而是在保持原始数据的情况下对其进行签名。但在之后的实际发起请求时,可正常进行 URL 编码或转义。


版权声明

本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。

 

扫一扫在手机阅读、分享本文

已有0条评论