2015-10-05 190 views
8

護照似乎是簡單身份驗證的不錯選擇,不顯眼且不難設置。我正在構建一個使用JWT進行身份驗證的MEAN棧,因此我期待Passport JWT。但是我有些事情我很困惑。護照JWT&授權與身份驗證

1)我正確地認爲Passport JWT僅用於驗證請求,不用於生成有效的jwt?也就是說,它是否僅用於驗證令牌的存在? 2)passport.authorizepassport.authenticate有什麼不同?我應該什麼時候使用一個呢?

3)我有3條路線用於認證相關事宜,loginsignupauthenticate

login將檢查用戶電子郵件/密碼組合是否存在並匹配,然後爲客戶端生成令牌。 signup將檢查以確保電子郵件不存在,然後爲客戶端生成令牌。 現在爲authenticate這是我有點混淆。如果我已經有loginsignup,我甚至需要authenticate路線嗎?如果有的話,似乎驗證將是我通過passport.use爲JWT戰略,然後loginsignup與可能增加的verify_token路線將是我唯一不受保護的路線,其中一切都會打電話給passport.authenticatepassport.authorize

回答

4
  1. 正確。 Passport JWT(passport-jwt)僅用於驗證請求。您需要另一個工具來實際生成令牌。 This tutorial使用JWT Simple(jwt-simple),我使用了jsonwebtoken(根據this reference)。
  2. 我還沒有看到任何對passport.authorize的引用,所以我相信passport.authenticate是你要找的。 passport.authenticate是您在路由中用來驗證傳入請求是否具有JWT令牌並且是允許的。
  3. 由於您通過loginsignup生成令牌,因此authenticate是多餘且不必要的。請確保您在路線中使用passport.authenticate以驗證請求期間的訪問權限。

一般安裝步驟,記住這裏是:

  • 護照,智威湯遜是認證
  • 需要使用另一個工具來創建一個JWT令牌
  • 的JWT令牌,你生成並返回到提出請求的任何內容,需要在後續請求中存在於標頭("Authorization: JWT eyJ0eXAiO..."
  • you need to setup your JWT strategy and tell passport to use it
  • 使用passport.authenticate驗證通過JWT令牌訪問中收到的請求的頭,如:

router.post('/users', passport.authenticate('jwt', {session: false}), function(req, res) { 
 
    // do something... 
 
});

+0

如果你能http://stackoverflow.com/questions/44044394/請幫助how-to-set-jwtfromrequest-i-am-not-using-authorization-here @ user3006381 – Aditya