开放接口签名设计openAPI的token鉴权

安全性考虑:

1. 用户身份校验

2. 防重放攻击

3. 防参数篡改

 请求接口加公共校验参数:

| 参数 作用|

| --- | --- |

| token | 授权给用户的唯一标识  |

| timestamp | 时间戳  |

| nonce | 随机数  |

| sign | 签名 |

校验流程

申请token

由服务方提供给用户身份的唯一标识token和配对的秘钥secret,token用于识别用户身份,secret用于加密接口的参数,计算sign值

sign值计算方式

get请求

* 原始请求参数param1,param2...加上公共参数token、timestamp(当前时间)、nonce(随机数)进行自然排序,并以kv格式拼成参数字符串s:nonce=2222¶m1=a¶m2×tamp=1111111&token=token

* 用secret对s进行进行hmac-sha1加密得到字符串上s2(加密方式可以自选)

* 对s2进程base64编码得的sign

post请求

* 将URL参数和表单参数去除sign后按key进行字典升序排序,以k=v格式用&连接拼成字符s1

* body中数据的MD5值s2(无body用空字符串)组装签名字符串s

* 签名字符串s=请求方法(大写)+"\n"+s1+"\n"+s2对s加密得到sign

  用密钥secret进行hmac-sha1加密得到sign1对sign1进行base64编码得到sign(加密方式可以自选)

请求方

原始url加上公共参数,计算sign值,再将sign值添加到url参数中,发送请求

服务方

* 校验时间戳是否过期

* 校验时间戳内的随机数是都过期(可用redis记录时间戳内被使用过的随机数,防重放攻击)

* 校验token是否有效

* 根据sign计算规则计算sign值并与请求中的sign比对,是否一致。

你可能感兴趣的:(开放接口签名设计openAPI的token鉴权)