一、采用token有效期机制
1)首次登陆成功时,后端需要返回两个token( request_token ,refresh_token )
2)其次requst_token设置比较短的有效期,例如1个小时 ,到期作废并告知前端过期需要刷新
3)request_token 到期后使用refresh_token 静默刷新request_token
4) refresh_token 设置较长有效期,例如3天 ,过期后重新登陆回到登陆流程
二、客户端存储token时要加密
1)一般获取到token后 ,基本上使用 localStorage 存储在本地,懂点技术的都知道怎么拿到它。如果不加密保存,拿到接口和token后 伪造请求就很容易的。
2)应该使用对称加密,请求的时候解密再请求
三、放在header中请求时,容易暴露token
1)请求时使用加密的token,后端接受请求时中间件解密后再验证token,避免客户端请求时截取token信息,最简单的pc端打开调试模式就可以看到请求头的信息。此处加密和存储token时的加密要不一样,否则没有什么用,不过都要使用对称加密。
2)生产环境使用https协议,避免传输过程中被获取
四、后端token的处理
1)token加密时加上关键的客户端信息,避免更换客户端使用token
2)以token为key ,用户关键信息及常用判断信息(用户密码,用户状态等)作为value存入缓存中;用户更改密码和状态时,将这些关键信息做变更,客户端请求时就能立刻判断出来。减少对数据库的请求
3)如果使用了websocket ,客户端定期发送操作状态给后端,规定时间内没有操作断开连接,注销登录信息等,后端操作空间也很大,可以即时发送各种指令。
任何加密手段都是那啥,对于专业的人来说,解密就是时间成本的问题。只能尽可能保护好关键信息,增加解密的时间成本来达到加密的意义。