【问题标题】:Proper way to do jwt refresh tokens with express使用 express 执行 jwt 刷新令牌的正确方法
【发布时间】:2021-10-02 03:50:36
【问题描述】:

我正在考虑实施刷新令牌的适当模式,但在几个步骤中,我有一些问题。我在前端使用nextjsaxios,在后端使用cookie-session 表达。 以下是我正在考虑的步骤:

  1. 客户端发送登录请求。登录后,我将访问令牌放入会话对象中,并将刷新令牌放入 res.cookie,既安全又 httpOnly。
  // for simplicity options are left out
  req.session = { accessToken };
  res.cookie("refreshToken", refreshToken)
  1. 在每次使用 axios 的请求时,我只提供访问令牌。这是第一个问题出现的地方。如果两者都是 httpOnly,我将如何只提供访问令牌而不发送刷新令牌?
  2. 如果访问令牌有效,请执行所需的任何操作。如果没有,则需要获取刷新令牌并将其与存储的令牌进行比较,依此类推。这是第二个问题。虽然我知道我需要在此步骤中检索刷新令牌,但我该如何正确执行?

如果有更多建议会很好,谢谢。

[编辑] 经过一番思考,我意识到使访问令牌不是 httpOnly 将允许我仅发送访问令牌,这将解决我的问题。但如果这不正确,请告诉我。

【问题讨论】:

    标签: express cookies axios jwt refresh-token


    【解决方案1】:

    这是标准模式 - 如this code of mine

    • 客户端发送访问令牌(可能在 HTTP Only cookie 中)
    • 当它过期时,他们会尝试通过调用 /refresh 端点来刷新访问令牌
    • 如果刷新成功,他们将使用新的访问令牌重试 API 请求
    • 否则客户端会重定向用户重新登录

    不要将访问令牌设为非 HTTP Only,因为任何恶意代码都可以从 document.cookie 中获取它。

    这也允许您为 RT cookie 设置 /refresh 的路径,以便它仅在刷新请求时发送。

    还要确保包含令牌的 cookie 使用仅服务器端已知的对称密钥进行强加密 (AES256)。 This Express library 将为您完成工作。

    【讨论】:

    • 谢谢,这太棒了,几乎就是我要做的。我最近了解了 cookie 上的路径,这是我需要的,而不是非 HTTP Only。
    • 太棒了 - 也看到我刚刚添加的加密点
    猜你喜欢
    • 2019-02-16
    • 2020-01-25
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2016-06-25
    • 2018-02-14
    相关资源
    最近更新 更多