安全性考虑:
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比对,是否一致。