Javascript 如何安全地保存从auth0登录收到的JWT令牌(nodejs express)
我是Auth0新手,正在尝试在常规的express web应用程序中实现它。在用户访问我的一些端点之前,我需要保护/验证用户。我的理解是,我可以使用从登录回调返回的JWT来实现这一点。我已经做到了这一点,但当我登录时,它会重定向,我不确定如何传入访问令牌/将其安全地存储在客户端 这就是我的回调端点在登录后的样子。它返回授权码,但我在这里迷路了 我在登录时返回: /回调?代码=oi9-ZTieXo0hYL6A&状态=sMJAUK4QVs7jziJ7lXvwmGKFJavascript 如何安全地保存从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
// 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并在验证函数中检索用于验证的令牌。阅读更多