1. Token

token一般分为两种:

api_token:用于访问不需要用户登录等操作
user_token:用于访问需要用户登录等操作

实现流程: 给每个应用,颁发一个appid跟appkey,appkey用于参数签名使用,保存到客户端(可能需要做点安全处理,防止泄露)。

2. 参数签名(Signature)

一般是所有参数(或者非空参数)进行排序+token+appkey+timestamp+nonce 通过加密算法进行加密,传到服务端,可以放到header里面,也可以直接当作参数。

timestamp 用于防止dos攻击,服务端通过timestamp跟当前比较,比如设定了5分钟有效,如果不在时间范围内请求无效。因此timestamp只能减轻dos攻击。

signature 传到服务端之后,服务端会按照约定的签名进行生成,比较,如果不一致则不执行接口。

防止重复提交:可以把signature存到redis里面,有sign则不执行,没有则继续走token判断接口。