如何安全地保存从 auth0 登录收到的 JWT 令牌(nodejs express)
Posted
技术标签:
【中文标题】如何安全地保存从 auth0 登录收到的 JWT 令牌(nodejs express)【英文标题】:How to save JWT token recieved from auth0 login securely (nodejs express) 【发布时间】:2020-02-20 22:46:27 【问题描述】:我是 Auth0 的新手,并试图在我的常规快速 Web 应用程序中实现它。我需要在用户访问我的某些端点之前保护/验证用户。我的理解是,我可以使用从登录回调返回的 JWT 来执行此操作。我已经做到了这一点,但是当我登录时,它会重定向,我不确定如何传递访问令牌/将其安全地存储在客户端。
这是我登录后回调端点的样子。它返回授权码,但我从这里迷路了。
https://auth0.com/docs/api-auth/tutorials/authorization-code-grant
我在登录时返回这个:
/callback?code=oi9-ZTieXo0hYL6A&state=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);
);
我从这里去哪里?
【问题讨论】:
使用JS sessionStorage存储token怎么样? w3schools.com/jsref/prop_win_sessionstorage.asp 如果这是安全的方式,那么我完全赞成。我如何重定向并返回此代码(其 req.url)?如果我不认为必须重定向,我无法在消息中发送它 一旦你拥有它,你就将它附加到每个受保护的 http 请求的标头中。 是的,但我如何将它发送给客户?我只是在 url 中附加令牌吗?所以 res.redirect '/user' + req.token ? 你可以使用“http-only”cookie;添加“安全”标志以增加安全性。http-only
标志防止浏览器将 cookie 暴露给前端 JS,并且安全标志使浏览器通过加密连接(通过 HTTPS)传输它。然后,您可以解压缩 cookie 并检索令牌以在您的验证功能中进行验证。阅读更多here
【参考方案1】:
Auth0 不建议将令牌存储在浏览器存储(会话/本地存储)中。对于客户端应用程序,令牌应该是短暂的,并在必要时通过静默身份验证进行更新(通过与身份验证服务器在隐藏 iframe 中的 cookie 会话进行更新)。
此处概述: https://auth0.com/docs/security/store-tokens
如果您有后端,则在那里处理令牌,如果您使用的是 SPA + API,则使用链接中概述的策略。
【讨论】:
以上是关于如何安全地保存从 auth0 登录收到的 JWT 令牌(nodejs express)的主要内容,如果未能解决你的问题,请参考以下文章