单token问题以及解决方案

发布时间 2023-06-12 11:06:22作者: 一只快乐的柠檬精J

场景说明

单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中令牌,