2017-08-25 36 views
1

我正在使用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'); 

    } 
); 

回答

3

你有一組選項這裏

餅乾

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

相關問題