双Token解决方案
以往的项目大部分解决方案为单 token:
- 用户登录后,服务端颁发 jwt 令牌作为 token 返回
- 每次请求,前端携带 token 访问,服务端解析 token 进行校验和鉴权
存在的问题:
- 有效期设置问题:有效期设置需要对时间做平衡,不能太短也不能太长
- 续期问题:一旦过期,用户必须重新登录,很难做无感刷新
- 无状态问题:token 是无状态的,单 token 颁发后服务端无法主动使其失效
原理解析
这里引入双 token 机制:
- accessToken:时间较短,一般为 1天
- refreshToken:时间较长,一般为 3 天
登录过程:
- 用户携带用户名和密码登录
- 服务端为其颁发 accessToken 和 refreshToken
三验证环节:
- 一验证:前端请求携带 accessToken,验证是否过期,不过期放行,过期则进入第二个验证环节
- 二验证:前端请求携带 refreshToken,验证是否过期,不过期进入第三个验证环节,过期则要求用户重新登录
- 三验证:对 ip 地址进行限流,对 refreshToken 解析 判断是否存在,存在则颁发新的 accessToken 和 refreshToken 返回前端更新,前端没接收成功或者失败则删除所有token,
生成 Token
1 | /** |
校验 Token
1 |
|
刷新 Token
1 |
|
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Nruonan Blog!