请简述重新登录 refresh token 的原理

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 627

Author 回答者: haotie1990

Refresh Token,将会话管理流程改进如下。

  • 客户端使用用户名密码进行认证

  • 服务端生成有效时间较短的 Access Token(例如 10 分钟),和有效时间较长的 Refresh Token(例如 7 天)

  • 客户端访问需要认证的接口时,携带 Access Token

  • 如果 Access Token 没有过期,服务端鉴权后返回给客户端需要的数据

  • 如果携带 Access Token 访问需要认证的接口时鉴权失败(例如返回 401 错误),则客户端使用 Refresh Token 向刷新接口申请新的 Access Token

  • 如果 Refresh Token 没有过期,服务端向客户端下发新的 Access Token

  • 客户端使用新的 Access Token 访问需要认证的接口

Refresh Token提供了服务端禁用用户 Token 的方式,当用户需要登出或禁用用户时,只需要将服务端的 Refresh Token 禁用或删除,用户就会在 Access Token 过期后,由于无法获取到新的 Access Token 而再也无法访问需要认证的接口。这样的方式虽然会有一定的窗口期(取决于 Access Token 的失效时间),但是结合用户登出时客户端删除 Access Token 的操作,基本上可以适应常规情况下对用户认证鉴权的精度要求。

Author 回答者: shfshanyue

TODO