【问题标题】:how to do authorization (nodejs, express) with two tokens (access/refresh)如何使用两个令牌(访问/刷新)进行授权(nodejs,express)
【发布时间】:2021-06-07 17:29:32
【问题描述】:

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

我的技术栈:

  • MongoDB
  • ExpressJS
  • ReactJS
  • NodeJS

【问题讨论】:

  • 您是在使用授权提供商(例如 okta、auth0、fusion auth)还是在自己的服务器上使用 OAuth/OICD?
  • 在您自己的服务器上

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


【解决方案1】:

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

  1. 使用您现有的访问令牌进行呼叫。如果你没有得到 401,那你很好。
  2. 如果您确实收到 401,则您的令牌可能已过期,然后您可以使用刷新令牌和 grant_type=refresh_token 调用授权服务器上的令牌端点以获取新的访问令牌并再次尝试调用。李>

在进行另一次调用之前,始终使用刷新令牌请求新的访问令牌可能是最有意义的。

【讨论】:

  • 你不会有任何带有代码示例的材料吗?
  • @Krytoi 您现在如何进行身份验证?
  • 我检查数据进行验证,搜索现有用户,创建令牌,并将其提供给响应
  • 我需要在客户端存储一个刷新令牌吗?
  • @Krytoi 永远不要在客户端上存储刷新令牌,除非在内存中
【解决方案2】:

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

【讨论】:

  • @ScottMclntosh 我需要将刷新令牌保存在数据库中吗? (我有这个 mongo)
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 2019-01-13
    • 2020-07-12
    • 2016-02-25
    • 2018-08-21
    • 2020-03-06
    • 2020-04-28
    • 2014-09-13
    • 2019-06-29
    相关资源
    最近更新 更多