2013-10-04 61 views

回答

53

如果我理解正確,Passport.js中Local,Basic和Digest策略之間的差異很微妙但很重要。這裏的破敗:

本地passport-local

護照的本地策略是一個簡單的用戶名和密碼認證方案。它從用戶名(或其他標識符)中找到給定用戶的密碼並檢查它們是否匹配。本地策略與其他兩種策略的主要區別在於其使用持久登錄會話。該策略應該通過SSL/TLS使用。

基本passport-http

通過護照實施的基本策略看起來幾乎等同於當地的戰略,一個細微的差別。基本策略是與體系結構無狀態的API端點一起使用。因此,會話需要而不是,但可以使用。這個策略也應該使用SSL/TLS。會話標誌可以設置像這樣:

app.get('/private', passport.authenticate('basic', { session: false }), function(req, res) { 
    res.json(req.user); 
}); 

摘要passport-http

摘要策略比,它採用了特殊的挑戰 - 響應範例,以便其他兩個策略稍有不同避免以明文形式發送密碼。當SSL/TLS不可用時,此策略將是一個很好的解決方案。

這是基本與摘要的好文章:How to Authenticate APIs

注:所有三招讓會話支持可選的。這兩個護照HTTP策略允許您設置會話標誌,而護照docs這麼一說,關於護照的當地戰略:

注意,啓用會話支持完全是可選的,但建議對大多數應用。

+2

「基本策略是與架構無狀態的API端點一起使用」 - 您是指無狀態的含義?你能舉一些例子嗎?如果我理解正確,本地策略就是「如果您已經在支持用戶會話,例如爲每個會話保存臨時變量,那麼cookie已經識別了會話,並且每次都發送用戶名和密碼毫無意義」。 – Oren

+3

基本策略使用'authentication'標頭進行驗證,請參閱https://github.com/jaredhanson/passport-http/blob/master/lib/passport-http/strategies/basic.js#L68 – Vadim

+0

@Vadim謝謝! ! ü拯救我的生命:) –

2

如果您使用Passport本地策略: - 會話已建立,因此您不必爲每個請求發送信用; - 默認情況下,用戶名和密碼在「用戶名」和「密碼」標題中提供;

如果您使用Passport基本/摘要策略: - 未使用會話,因此您必須在每次API調用時提供憑據; - 用戶名和密碼/哈希包含在「授權」標題中;