使用访问令牌和刷新令牌的 JWT 身份验证流程

时间:2021-07-06 12:42:42

标签: authentication web jwt access-token

我正在处理一个项目(不是生产级别的,只是为了提升我的技能)并且我正在使用 JWT 来处理身份验证。 从我读到的内容来看,仅将 JWT 用作访问令牌是非常不安全的,因此我们需要刷新令牌。因此,在登录时,服务器会返回访问令牌和刷新令牌(我将其存储在 httpOnly cookie 中)。访问令牌在短时间内到期,但刷新令牌用于在它到期时获取新令牌。

我的问题是,我们什么时候使用刷新令牌来获取新的访问令牌?是在用户想要获取受保护资源并发现访问令牌已过期(而刷新令牌尚未过期)时还是每次用户想要获取受保护资源时发送新的访问令牌?我对刷新令牌何时何地发挥作用感到困惑。

(我使用 React 作为前端,使用 Nodejs 作为服务器)

2 个答案:

答案 0 :(得分:1)

刷新令牌可随时用于请求新的访问令牌。在他请求之前检查访问令牌的有效性是实现这一目标的一种方法。另一种常见做法是在当前令牌到期的特定时间范围内刷新访问令牌。在这种情况下,一个简单的 cronjob 就可以工作。如果您假设访问令牌未在多个地方使用(它不应该使用),那么在创建新访问令牌时,当前访问令牌可能会失效。此外,为了获得最大的安全性,应将刷新令牌替换为访问令牌。这限制了长期存在的刷新令牌被泄露的安全风险。

答案 1 :(得分:1)

您正在使用一些安全令牌,因此这意味着您的系统具有一些受保护的资源。只有在成功验证令牌后才能访问这些资源。由于您使用的是 JWT 令牌(通常用于无状态身份验证)并且您的系统同时向客户端授予 access_tokenrefresh_token,因此在服务器端您可以使用一些身份验证拦截器来验证 access_token每个私有请求并在令牌到期时返回一些错误代码。在客户端,您还可以使用一些过滤器来捕获错误代码,并通过利用可用的 refresh_token 从服务器请求新的 access_token。如果 refresh_token 过期,您的系统应遵循新身份验证的路线。