繁体   English   中英

使用Node.js刷新JWT令牌的最佳方法

[英]Best way to refresh JWT token using Node.js

我已经创建了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'
                        })
                    }
                }

您将需要两个令牌:

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

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

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

您还需要存储访问令牌的expiry_date (您可以通过登录api做出响应)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM