【问题标题】:Best way to refresh JWT token using Node.js使用 Node.js 刷新 JWT 令牌的最佳方法
【发布时间】:2019-08-09 13:52:49
【问题描述】:

我已经创建了 node.js 后端。在登录时,我正在发送一个 jwt 令牌。为了用户体验,我不希望他们重新登录,而是刷新他们的令牌,我已将其设置为 4 小时后过期。

但是,我没有很好地了解如何有效地做到这一点。我的想法是在客户端提供一个按钮,通过单击哪个用户可以刷新他们的令牌。假设我可以从客户端打一个休息电话,我需要帮助来实现它。欣赏它。

    if (response) {
                bcrypt.compare(req.body.password, response.password, (error, result) => {
                    if (result) {
                        const token = jwt.sign(
                            {
                                email: response.email,
                                userId: response._id
                            },
                            process.env.JWT_KEY,
                            {
                                expiresIn: '4h'
                            });
                        return res.status(200).json({
                            message: 'Auth Successful! User Found. ',
                            token
                        })
                    } else {
                        return res.status(404).json({
                            message: 'Auth Failed! User Not found'
                        })
                    }
                }

【问题讨论】:

  • 当你点击401时,你会触发令牌刷新api吗?
  • @saikatchakrabortty 没错,它不是最终草案。但是,我将不胜感激我的问题的任何答案。而且我认为在达到 401 时刷新令牌是不明智的。这只不过是一种违规行为,因为该用户会在提供无效令牌时登陆 401。
  • 只有在旧的令牌尚未过期或始终可以刷新时才能刷新令牌?

标签: javascript node.js reactjs jwt


【解决方案1】:

你需要两个令牌:

  1. Refresh Token(将保存在数据库中)
  2. Access Token(您的 JWT 将很快过期,例如 10 分钟)

刷新令牌通常不会很快过期。但是,如何保护刷新令牌可能存在挑战。

您还需要在每次用户刷新其令牌/登录时更改数据库中的刷新令牌。

您还需要存储您的访问令牌的expiry_date(您可以将其作为登录 api 的响应)。

然后,在您的前端,您可以根据您的安全要求将这些令牌存储在 localStorage / sessionStorage 中。

然后,每个 API 调用都会检查您设置的到期日期。如果它达到某个阈值(例如在 expiry_date 前 5 分钟),您将调用刷新令牌 API。

这是我用过的一种方法。但是,它可能不被视为最佳做法。

【讨论】:

    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2016-06-25
    • 2018-02-14
    • 2021-10-02
    • 1970-01-01
    • 2020-12-26
    相关资源
    最近更新 更多