Javascript 如何安全地保存从auth0登录收到的JWT令牌(nodejs express)

Javascript 如何安全地保存从auth0登录收到的JWT令牌(nodejs express),javascript,node.js,express,jwt,auth0,Javascript,Node.js,Express,Jwt,Auth0,我是Auth0新手,正在尝试在常规的express web应用程序中实现它。在用户访问我的一些端点之前,我需要保护/验证用户。我的理解是,我可以使用从登录回调返回的JWT来实现这一点。我已经做到了这一点,但当我登录时,它会重定向,我不确定如何传入访问令牌/将其安全地存储在客户端 这就是我的回调端点在登录后的样子。它返回授权码,但我在这里迷路了 我在登录时返回: /回调?代码=oi9-ZTieXo0hYL6A&状态=sMJAUK4QVs7jziJ7lXvwmGKF // Perform the

我是Auth0新手,正在尝试在常规的express web应用程序中实现它。在用户访问我的一些端点之前,我需要保护/验证用户。我的理解是,我可以使用从登录回调返回的JWT来实现这一点。我已经做到了这一点,但当我登录时,它会重定向,我不确定如何传入访问令牌/将其安全地存储在客户端

这就是我的回调端点在登录后的样子。它返回授权码,但我在这里迷路了

我在登录时返回:

/回调?代码=oi9-ZTieXo0hYL6A&状态=sMJAUK4QVs7jziJ7lXvwmGKF

// Perform the final stage of authentication and redirect to previously requested URL or '/user'
router.get('/callback', function (req, res, next) {     
  passport.authenticate('auth0', function (err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function (err) {
      if (err) { return next(err); }
      const returnTo = req.session.returnTo;
      delete req.session.returnTo;  
        res.redirect('/user);
    });
  })(req, res, next);
});

我该怎么办?

Auth0不建议将令牌存储在浏览器存储(会话/本地存储)中。对于客户端应用程序,令牌应该是短期的,并在必要时通过静默身份验证(通过与隐藏的iframe中的auth服务器的cookie会话进行更新)进行更新

这里概述了这一点:


如果您有后端,则在那里处理令牌;如果您使用SPA+API,则使用链接中概述的策略。

如何使用JS sessionstorage存储令牌?如果这是一条安全的道路,那么我完全赞成。如何重定向和返回此代码(其req.url)?如果我必须重定向,我不能在消息中发送它。我不认为一旦你有了它,你就可以将它附加到每个受保护的http请求的头中。是的,但是我如何将它发送到客户端?我是否只是在url中附加标记?所以res.redirect'/user'+req.token?您可以使用“仅http”cookie;为附加安全性添加“安全”标志。
http only
标志防止浏览器向前端JS公开cookie,而secure标志使浏览器通过加密连接(通过HTTPS)传输cookie。然后,您可以解包cookie并在验证函数中检索用于验证的令牌。阅读更多