概述
与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据,我主要围绕时间戳,token,签名三个部分来保证API接口的安全性
![00350fe5b9b9d2e54e6e6ff9a4d6af8e.png](https://img-blog.csdnimg.cn/img_convert/00350fe5b9b9d2e54e6e6ff9a4d6af8e.png)
1.用户成功登陆站点后,服务器会返回一个token,用户的任何操作都必须带了这个参数,可以将这个参数直接放到header里。
2.客户端用需要发送的参数和token生成一个签名sign,作为参数一起发送给服务端,服务端在用同样的方法生成sign进行检查是否被篡改。
3.但这依然存在问题,可能会被进行恶意无限制访问,这时我们需要引入一个时间戳参数,如果超时即是无效的。
4.服务端需要对token,签名,时间戳进行验证,只有token有效,时间戳未超时,签名有效才能被放行。
开放接口
没有进行任何限制,简单粗暴的访问方式,这样的接口方式一般在开放的应用平台,查天气,查快递,只要你输入正确对应的参数调用,即可获取到自己需要的信息,我们可以任意修改参数值。
* * Description: 开放的接口 * @author huangweicheng * @date 2020/12/21*/@RestController@RequestMapping("/token")public class TokenSignController { @Autowired private TokenSignService tokenSignService; @RequestMapping(value = "openDemo",method = RequestMethod.GET) public List openDemo(int personId){ return tokenSignService.getPersonList(personId); }}
Token认证获取
用户登录成功后,会获取一个ticket值,接下去任何接口的访问都需要这个参数。我们把它放置在redis内,有效期为10分钟,在ticket即将超时,无感知续命。延长使用时间,如果用户在一段时间内没进行任何操作,就需要重新登录系统。
@RequestMapping(value = &