为什么需要双token | 青训营笔记

1,237 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天,记录一下对 token 认证相关知识的学习。

什么是 token

Token 是服务端生成的一个字符串,作为客户端进行请求的令牌。当首次登录后,服务器生成一个 token 并返回给客户端,以后客户端只需携带这个 token 前来请求数据即可,无需再携带用户名和密码。

单 token 认证
流程
  1. 首次登录,使用账号密码,服务端进行验证,如果验证通过,则创建一个 token 并返回给客户端,在客户端进行储存,该 token 会设置一个有效时长。

  2. 在后续请求中携带该 token。

    1. 如果 token 没有过期,则正常返回数据。
    2. 如果 token 过期,则返回 token 过期的错误信息,客户端跳转到登录界面要求用户登录。
存在的问题

假如 token 的有效期为2小时,在这段时间里,用户一直在使用客户端,然而2小时后却突然要求用户重新登陆才能正常使用,这会严重影响用户的体验,是不合理的。

单纯延长 token 的有效时长会让安全性降低,不是一个好的办法,也不能从根本上解决问题。

这里使用两个简单的概念:活跃用户和非活跃用户。顾名思义,活跃用户就是持续使用客户端的用户,非活跃用户就是已经很久不使用客户端的用户。

一方面,从用户体验上来说,我们并不希望活跃用户重新登录;另一方面,从安全性上来说,我们应该要求非活跃用户重新登陆。

为了解决这一问题,便出现了双 token 的认证方式。

双 token 认证
流程
  1. 首次登录,使用账号密码,服务端进行验证,如果验证通过,则创建两个 token 并返回给客户端。一个是有效时长较短的 access token,另一个是有效时长较长的 refresh token。

  2. 在后续请求中携带 access token。

    1. 如果 access token 没有过期,则正常返回数据。

    2. 如果 access token 过期,则使用 refresh token 请求刷新 access token。

      1. 如果 refresh token 没有过期,则返回一个新的 access token 给客户端,客户端使用新的 access token 请求数据。
      2. 如果 refresh token 过期,则返回 token 过期的错误信息,客户端跳转到登录界面要求用户登录。
分析

使用 refresh token 区分活跃用户和非活跃用户,既提升了用户体验,也提升了安全性。