节点:通过页面重定向发送JSON Web令牌给客户端
问题描述:
我正在使用Node Express构建我的后端服务器。此外,身份验证是我的应用发生在Passport-SAML上。我正在使用JWT来维护用户会话。 所以流量,节点:通过页面重定向发送JSON Web令牌给客户端
- 用户调用登录端点
- 他们将被重定向到SAML身份提供者。
- 提供程序验证用户,并将回拨 的授权发送回服务器的回调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');
}
);
答
你有一组选项这里
饼干
res.cookie('token', token, ...);
res.redirect(...);
URL参数
res.redirect(`/some/url?token=${token}`);
自定义页眉
res.set('x-token', token);
res.redirect(...);
无法使用cookie,因为我正在使用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('/');}); ? 通过这种方式,令牌将与页面重定向一起发送到前端? 还是一个noob,请忍受我的业余技能。 – shubhammakharia
从安全角度来看,由于采用上述解决方案,我们将向JWT发送自定义设置标题。我的应用程序安全性有多明智,我可以采取哪些措施来应对? – shubhammakharia
@shubhammakharia自定义标题的想法仅适用于在重定向服务器上将标题解析出来,然后使用HTML将其发送给客户端的情况。我认为在你的情况下,只有HTTP /签名的cookie会是最好的,因为你可以在任何时候访问它,并且易于管理。在安全性方面,这是一个太大的话题,因为它依赖于各种各样的东西,因此作为10的入门者,尽管这里有一些[好的提示](https://stormpath.com/blog/jwt-the正确的方式)如何使用JWT。 – James