节点:通过页面重定向向客户端发送 JSON Web 令牌
Posted
技术标签:
【中文标题】节点:通过页面重定向向客户端发送 JSON Web 令牌【英文标题】:Node: Sending JSON Web token to client with page redirect 【发布时间】:2018-02-03 13:41:51 【问题描述】:我正在使用 Node Express 来构建我的后端服务器。此外,身份验证是我的应用程序使用 Passport-SAML 进行的。我正在使用 JWT 来维护用户会话。 所以流程是,
-
用户在登录端点调用
它们被重定向到 SAML 身份提供者。
Provider 验证用户并发回授权
通过回调 URL 发送到服务器。
我正在使用 POST 回调 URL 进行身份验证,然后创建一个
用户执行授权和会话管理的令牌。
回调 POST 端点也有一个页面重定向。到目前为止,我了解到 res.status 和 res.redirect 不能在同一个端点中,原因很明显。我一直在努力寻找正确的方法,非常感谢任何帮助。
router.route('/login')
.get(
passport.authenticate(config.passport.strategy,
successRedirect: '/',
failureRedirect: '/login'
)
);
router.route(config.passport.saml.path)
.post(
passport.authenticate(config.passport.strategy,
failureRedirect: '/',
failureFlash: true
),
function (req, res)
res.redirect('/');
var token = Verify.getToken(req.user.saml);
return res.status(200).json(
status: 'Login successful!',
success: true,
token: token
);
console.log(token,'yes');
);
【问题讨论】:
【参考方案1】:这里有很多选项
Cookie
res.cookie('token', token, ...);
res.redirect(...);
网址参数
res.redirect(`/some/url?token=$token`);
自定义标题
res.set('x-token', token);
res.redirect(...);
【讨论】:
不能使用cookies,因为我是用JWT来代替的。我将使用自定义标题。它似乎有效,但要确认这是您的解决方案: .post(passport.authenticate(config.passport.strategy,...), function (req, res) var token = Verify.getToken(req.user .saml); res.set('x-access-token', token); res.redirect('/'); ); ?并且通过这种方式,令牌将与页面重定向一起发送到前端?还是菜鸟,请忍耐我的业余技能。 从安全的角度来看,由于采用上述解决方案,我们将发送带有自定义集标头的 JWT。我的应用程序安全性可能有多脆弱,我可以采取什么措施来对付它? @shubhammakharia 自定义标头的想法仅在您在重定向的服务器上解析标头然后将其与您的 html 一起发送到客户端时才有效。我认为在您的情况下,仅 HTTP / 签名的 cookie 将是最好的,因为您可以在任何时候从那里访问它并且 可以说更容易管理。就安全性而言,这是一个太大的话题,不能塞进 cmets,因为它取决于很多事情,作为 10 人的入门,尽管这里有一些关于如何使用 JWT 的good tips。 基本上对于我的应用程序,当用户定向到 /login 时,他们会被重定向到第三方身份验证提供程序 (SAML Idp),然后他们会发回我的应用程序的端点。在回调 URL 端点,我正在设置标头,我意识到这是错误的。相反,我应该将 /login 端点上的令牌返回给客户端。撇开安全不谈,令牌是否可以在 /login 请求中作为 HTTP 标头发送回用户。客户端可以解析头部并访问信息。 通常哪个字段将用于在主机 JSON 响应中包含 JWT?以上是关于节点:通过页面重定向向客户端发送 JSON Web 令牌的主要内容,如果未能解决你的问题,请参考以下文章