token过期,如何使用refresh_token实现无感刷新

96 阅读2分钟

token验证的原理

常见对的token认证方式有两种:

  • 基于token认证:将认证信息每次都放在请求头中,每次发起请求时,将token发给服务端认证
  • 基于cookie认证:客户端本地存储的cookie文件记录用户的操作状态,在随后的访问请求中,客户端浏览器会检索与用户请求资源相匹配的cookie,提交给web服务器验证,合法(允许用户访问请求的资源),反之(拒绝用户的请求)

什么是无感知刷新token?

指在token过期之前,系统自动使用Refresh Token获取新的Access Token,实现token的无感知刷新。

  • accessToken(用于请求头中,进行鉴权,存在有效期)【负责效率,直接解密】
  • refreshToken(刷新令牌,用于更新过期的accessToken,有效期更长)【负责安全,需要查数据库,服务端吊销操作】

双token验证流程

  • 1: 用户登录向服务端发送账号密码,登录失败返回客户端重新登录。登录成功服务端生成 accessToken 和 refreshToken,返回生成的 token 给客户端。

  • 2: 在请求拦截器中,请求头中携带 accessToken 请求数据,服务端验证 accessToken 是否过期。token 有效继续请求数据,token 失效返回失效信息到客户端。

  • 3: 客户端收到服务端发送的请求信息,在二次封装的 axios 的响应拦截器中判断是否有 accessToken 失效的信息,没有返回响应的数据。有失效的信息,就携带 refreshToken 请求新的 accessToken。

  • 4: 服务端验证 refreshToken 是否有效。有效,重新生成 token, 返回新的 token 和提示信息到客户端,无效,返回无效信息给客户端。

  • 5: 客户端响应拦截器判断响应信息是否有 refreshToken 有效无效。无效,退出当前登录。有效,重新存储新的 token,继续请求上一次请求的数据。

操作步骤如下