场景说明
单token问题
1、token设置时长问题
2、token是无状态的,即token发布后,有效期内都无法让其失效
解决方案
双token三验证
解决时长问题
1、登录成功后,会生成两个token,前者有效期短(5min)
2、请求后端服务时,携带短令牌,短令牌失效,通过长令牌到后台换取新令牌,进行刷新,直到长的失效
无状态问题
- 后端可以控制长令牌提前失效,将其设置为只能使用一次
- 具体逻辑 : 将refresh_token存到redis中,设置过期时间,退出登录删除redis中即可,以后登录首先判断redis中是否有令牌信息,若是没有,即使令牌正确(被窃取),依然不会走检验逻辑。
三次校验
1、一次校验 : 正常访问校验短令牌
2、二次校验 : 令牌刷新校验刷新令牌
3、三次校验 : 判断redis中该刷新令牌是否存在
逻辑流程
- 登录时: 生成两个令牌,刷新令牌存储到redis
- 用户正常操作 : 携带access_token,五分钟内,正常访问,五分钟后
- 前端发起请求,请求刷新令牌,后端校验刷新令牌
- 若有问题,重新登陆
- 无问题,去redis中看该令牌是否存在
- 不存在,退出登录
- 存在,返回新的access_token和刷新令牌,并且删除redis中令牌,