看起来好像先后端分离是个浪潮,原来只有APP客户端会考虑这些,如今连Web都要考虑先后端分离 。这里面不得不谈的就是API的设计和安全性,这些个问题不解决好,将会给服务器安全和性能带来很大威胁 。下面我也是根据本身的一些经历和经验说下本身的一些心得 。算法
接口的安全性主要围绕token、timestamp和sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:后端
Token受权机制:缓存
用户使用用户名密码登陆后服务器给客户端返回一个Token(一般是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,若是Token不存在,说明请求无效。Token是客户端访问服务端的凭证。安全
时间戳超时机制:服务器
用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,若是时间差大于必定时间(好比5分钟),则认为该请求失效。时间戳超时机制是防护DOS攻击的有效手段。cookie
签名机制:前后端分离
将 Token 和 时间戳 加上其余请求参数再用MD5或SHA-1算法(可根据状况加点盐)加密,加密后的数据就是本次请求的签名sign,服务端接收到请求后以一样的算法获得签名,并跟当前的签名进行比对,若是不同,说明参数被更改过,直接返回错误标识。签名机制保证了数据不会被篡改。mvvm
加密解决了数据上行的安全,然而黑客,直接抓密文来提交,怎么办?性能
接口签名,仅仅依靠参数顺序的排列组合,安全强度不够网站
Token受权机制:用户使用用户名密码登录后,服务器给客户端返回一个Token,并在服务器中缓存此Token。后续服务器收到请求后进行Token验证,若Token不存在,则说明请求无效
安全是一个永恒的话题,随着各大网站全站https的推动,安全也愈来愈被重视。签名设计你们必须有,HTTPS但愿你们有。
欢迎你们一块儿交流,喜欢文章记得点个赞哟,感谢支持!