如何使用两个令牌(访问/刷新)进行授权(nodejs、express)

时间:2021-03-09 19:22:25

标签: node.js express jwt access-token refresh-token

晚上好,我遇到了一个问题,我需要使授权更安全且无需重新登录。我在互联网上读到您需要使用两个令牌(访问和刷新),但如何正确使用它们进行授权。您可以通知资源,其中使用两个令牌进行了有效授权。

我的技术栈:

  • MongoDB
  • ExpressJS
  • ReactJS
  • NodeJS

3 个答案:

答案 0 :(得分:1)

如果您使用 offline_access 范围请求身份验证,除了访问令牌之外,您还将获得刷新令牌。将此刷新令牌保存到数据库中,每当您需要代表用户进行另一个调用时,您都可以

  1. 使用您现有的访问令牌拨打电话。如果您没有收到 401,那就没问题了。
  2. 如果您确实收到了 401,则您的令牌可能已过期,然后您可以使用刷新令牌和 grant_type=refresh_token 调用授权服务器上的令牌端点以获取新的访问令牌并再次尝试调用。

在再次调用之前始终使用刷新令牌请求新的访问令牌可能最有意义。

答案 1 :(得分:0)

据我所知,您只处理用于授权的访问令牌。刷新令牌仅用于刷新过期的访问令牌。刷新令牌交换为新的访问令牌 - 无需再次提供身份验证凭据。与重新进行身份验证相比,该调用(通常)还需要一小部分时间。

答案 2 :(得分:0)

一旦用户登录,给它两个令牌刷新和访问,将刷新令牌存储在数据库中,给访问令牌一个过期时间(大约 5-10 分钟或更短,取决于您的要求)。 对于每个请求,用户将使用访问令牌,对于每个请求,后端应检查过期的访问令牌。

如果访问令牌过期,用户将通过将存储的刷新令牌发送到后端(使用专用端点)来获得新的访问令牌,后端将检查刷新令牌是否存在于数据库中,如果是的,响应中将发送具有新过期时间的新访问令牌。

循环将一直持续到用户注销,在这种情况下,刷新令牌将从数据库中删除,一段时间后访问令牌也会过期。