节点:通过页面重定向发送JSON Web令牌给客户端

问题描述:

我正在使用Node Express构建我的后端服务器。此外,身份验证是我的应用发生在Passport-SAML上。我正在使用JWT来维护用户会话。 所以流量,节点:通过页面重定向发送JSON Web令牌给客户端

  1. 用户调用登录端点
  2. 他们将被重定向到SAML身份提供者。
  3. 提供程序验证用户,并将回拨 的授权发送回服务器的回调URL。
  4. 我正在使用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(...); 
+0

无法使用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

+0

从安全角度来看,由于采用上述解决方案,我们将向JWT发送自定义设置标题。我的应用程序安全性有多明智,我可以采取哪些措施来应对? – shubhammakharia

+0

@shubhammakharia自定义标题的想法仅适用于在重定向服务器上将标题解析出来,然后使用HTML将其发送给客户端的情况。我认为在你的情况下,只有HTTP /签名的cookie会是最好的,因为你可以在任何时候访问它,并且易于管理。在安全性方面,这是一个太大的话题,因为它依赖于各种各样的东西,因此作为10的入门者,尽管这里有一些[好的提示](https://stormpath.com/blog/jwt-the正确的方式)如何使用JWT。 – James