思路:
未登录:
- 生成一对RSA公钥私钥,公钥事先放在前端中,省去获取后端公钥的过程(防止被拦截,无法判断是否是后端传来的公钥)
- 用户未登陆时,通过公钥加密账号信息发送至后端,这样即便被窃取也无法得知内容
- 后端返回登陆生成的token,refresh token需要进行加密,理想办法是前端生成一对RSA公钥私钥,公钥发给后端加密,但是前端加密一般使用的node-rsa过大,微信小程序基本一引用就超出限制,uniapp压缩代码,分段都没用,所以放弃
- 前端将账号密码通过默认规则拼接成新字符串并MD5加密,作为对称加密密钥和账号传给后端,并加密token,refresh token返回。(token刷新问题可查看解决token刷新问题)
登录后:
- 依旧生成一对RSA公钥私钥,公钥事先放在前端中,私钥存后端
- 前端通过对称加密AES加密数据,token,refresh token。将密钥通过准备好的RSA公钥加密,添加到请求头部
- 后端收到请求通过私钥解密头部,获得密钥解密数据
- 后端返回数据通过前端传的密钥AES