繁体   English   中英

Session object 存储 JWT + 在 node.js 后端处理刷新令牌

[英]Session object storing JWT + handling refresh tokens in node.js backend

我正在使用 Angular 和 node.js (express) 构建我的应用程序,并且我正在使用 JWT 进行身份验证和授权。 Currently, I am storing JWT in session object on server in memory (req.session.jwt = user.generateToken()) and also, I am sending refresh token in HttpOnly cookie to the client.

当 JWT 过期时,我希望服务器给我新的 JWT,如果来自 cookie 的刷新令牌等于数据库中的刷新令牌 - 与用户关联。

我试图在 catch 块中的身份验证中间件中实现刷新令牌逻辑,但它不起作用。

(如果令牌验证失败,则将 cookie 中的 RF 令牌与数据库中的 RF 进行比较,如果为真,则设置新的 JWT 并运行路由处理程序。)

module.exports = function(req, res, next) {
  const token = req.session.jwt;

  if (!token) return res.status(401).send("Access denied.");

  try {
    const decoded = jwt.verify(token, config.get("jwtPrivateKey"));
    req.user = decoded;
    next();
  } catch (ex) {
    (async () => {
      let user = await User.findOne({ username: req.session.username });
      if (!user) return res.status(500).send("Invalid session");

      if (user.refreshToken === req.signedCookies.refreshToken) {
        req.session.jwt = user.generateToken();
        next();
      } else {
        return res.status(401).send("Invalid session");
      }
    })();
  }
};

当我在客户端的本地存储中存储令牌和刷新令牌时,我已经实现了这个刷新令牌逻辑,但这不是很好的实现,所以我试着让它像这样。 我在项目的 Angular 部分中有 token.interceptor - 来自本教程( https://angular-academy.com/angular-jwt/#refresh-token

这是我的后端https 的 github 回购://github.com/TenPetr/dashboard_backend

如果您有任何想法,如何实现此逻辑,请告诉我。

感谢您的建议。

当您生成新的 JWT 令牌时,由于请求将继续到下一个中间件步骤,您可能需要设置用户,就像您在 jwt 正确时所做的一样。 像这样的东西,试试看,如果有帮助,请告诉我:

if (user.refreshToken === req.signedCookies.refreshToken) {
  req.session.jwt = user.generateToken();
  const decoded = jwt.verify(req.session.jwt, config.get("jwtPrivateKey"));
  req.user = decoded;
  next();
}

暂无
暂无

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

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