大家都知道,访问一个接口的时候,如果你不做过滤,很容易出问题,比如有人会模拟请求篡改数据,这样就很不安全,因此就要设计一个安全的接口访问方式。
我的想法是在访问接口带上一个访问的令牌即token,这个token的生成可以根据用户Id生成一个字符串,存放在服务器缓存里面,以后每次访问都带上token,光用token还是不够的,还要带上一个签名,这个签名可以借助微信支付里面的方法,生成签名。
生成签名包括四个部分,时间戳,随机数,用户ID,签名参数,首先拼接签名参数,然后按照字符串字符按升序排序,然后使用MD5加密,最后转成大写的16进制,这样就生成了一个签名。
发起请求的时候,请求头里面带有时间戳,随机数,用户ID和刚才上一步得到的签名,根据时间戳判断请求是否失效,根据用户ID可以判断token是否失效,根据请求参数,服务端按照同样的规则计算签名,判断是否与传过来的签名是否一致,如果相同的话就是合法请求,如果不同则可能被篡改,禁止访问数据,返回错误信息。
但是这样其实还是有问题的,就是生成token的时候,因为这个方法是开放的,别人也可以根据用户ID得到token,如果是这样,他也可以用得到的token模拟请求。