怎么设计保证API接口安全

APP、前后端分离项目都采用API接口形式与服务器进行数据通信,传输的数据被查看、被抓包、被伪造时有发生,那么如何设计一套安全的API接口?

设计方案

  1. token授权认证,防止未授权用户获取数据
  2. 时间戳超时机制
  3. URL签名,防止请求参数被篡改
  4. 防重放,防止接口被第二次请求,防采集
  5. 采用HTTPS通信协议,防止数据明文传输

Token授权认证

Http协议是无状态的,一次请求结束,连接断开,下次服务器再收到请求,不知道发送请求的用户。对于有权限访问的模块,我们需要知道是哪个用户发起的请求。

token的设计方案,是用户在客户端通过用户名和密码登录后,服务器会返回给客户端一个token,并将token以键值对多方式存放在缓存中,然后客户端每次访问操作都携带上此token。服务端接受到请求后进行token验证。

token生成设计要求

  1. 保证唯一
  2. 要有时效性,过期后需重新登陆,来获取新的token
  3. 每次生成的token需不一致
  4. 缓存中保存键值对形式为:token,value(用户id或信息)

一般token过期后,会使用客户端保存的用户名+密码来进行静默登陆来获取token

时间戳超时限制

客户端每次请求接口都带上当前时间的时间戳timestamp,服务端接受到时间戳后跟当前时间进行对比,比如时间差大于一定时间(例如1分钟),则认为请求时效。

URL签名

使用算法对参数进行签名,对比客户端和服务端签名是否一致(客户端和服务端拥有私钥)

一般签名算法

  1. 首先对通信的参数按key进行字母排序放入数组中(一般请求的接口地址也要参与排序和签名,那么需要额外添加url=http://url/getInfo这个参数);
  2. 对排序完的数组键值对用&进行连接,形成用于加密的参数字符串;
  3. 在加密的参数字符串前面或者后面加上私钥,然后用md5进行加密,得到sign,然后随着请求接口一起传给服务器。

防重放

客户端第一次访问接口后,将签名sign存放到缓存中,超时时间设定为与时间戳到超时时间一致。

这样,如果请求被非法者截获,使用同一个url再次访问,发现服务端已存在签名,然后拒绝本次服务;如果sign缓存时效,客户端访问链接,由于时间戳时效,将拒绝服务。

采用HTTPS通信协议

HTTP协议是以明文方式发送内容

为了数据传输安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值