1

我正在尝试在我的网站上实现刷新令牌概念。

如果我理解正确,刷新令牌应该是用户获取新令牌的唯一标识符(令牌仅在 15 分钟内有效)。

我正在使用customId包在登录时为每个用户生成一个刷新令牌。

令牌过期时。我向端点发送一个请求,以根据refresh_token为每个用户提供的内容生成一个新令牌。

我正在使用 nuxtauth模块。

try {
    const tokenUser = await User.findOne({
      refresh: req.body.refresh_token
    })
    // console.log(tokenUser)
    const newToken = await jwtr.sign({
      iu: tokenUser._id.toString()
    },
      'SUPERSECERT', {
      expiresIn: '5000' // Testing
    }
    );
 
    return res.json({
      token: newToken
    });

  } catch (e) {
    return res.status(401).send('unauthorized');
  }


我这样做正确吗?或者我应该存储一个新创建的 jwt 令牌refresh_token而不是一个随机的唯一字符串?还是我错过了有关刷新令牌的一些信息?

4

1 回答 1

1

这个实现没问题,尽管您可能会考虑使用称为“滚动刷新令牌”的东西。每次使用刷新令牌获取新的访问令牌时,您也会生成一个新的刷新令牌并将两者都返回给客户端。从现在开始,应该只能使用新的刷新令牌来获取新的访问令牌。如果有人设法窃取刷新令牌,它可以为您提供更多安全性。

不过,您应该始终在某个时间点(例如几个小时后)使您的刷新令牌过期。这将帮助您确保即使有人找到旧的刷新令牌,他们也无法使用它。刷新令牌过期后,您应该要求用户再次登录。

于 2021-08-27T12:39:58.473 回答