2013-04-21 28 views
1

我正在尋找使用護照本地策略時的最佳實踐的一些信息。我在本地策略示例中使用了一個authToken,用於在github上找到的登錄持久性。與同事交談時,他們提出了一個問題:如何將此令牌存儲在會話cookie中,比存儲密碼更安全,因爲它本質上就是您在服務器上的身份驗證身份。那麼我如何回答這個問題呢?這是一個綠色的問題,我承認沒有完全理解整個生命週期。那麼如何將這個安全解決方案與bccrypt和mongo進行整合,就像這個例子一樣。如果僅僅是一個例子,並不一定意味着要展示一個強大的解決方案,那麼爲了保證我們的用戶和我們的應用程序安全,有哪些最佳實踐?使用Passport持久會話安全時,是否是authToken?

https://github.com/jaredhanson/passport-local/tree/master/examples/express3-mongoose-rememberme

回答

2

你的同事是沒有錯的,執行是不是很安全(實際上可以認爲是不太安全的,因爲SessionID的可作爲是不加密)。

只有在30天內才能使用它更安全,而用戶名/密碼可以在用戶移除之前使用。 (這也更有用,因爲您可以在不更改密碼的情況下刪除sessionId)。

但是,這不是實施的安全方式記住我,請參閱The definitive guide to form-based website authentication以獲取有關實現rememberMe的好方法的信息。

基本上你需要更改的GitHub代碼執行以下操作:

  1. 保持cookie來結束在會議結束時(即當用戶關閉瀏覽器)
  2. 如果用戶請求用用戶名/密碼登錄時記住我,用accessToken(httpOnly cookie)發送一個新的cookie。
  3. 當客戶端發送與的accessToken Cookie,但不是的sessionId cookie的請求,登錄用戶在使用的accessToken,然後更改的accessToken到一個新的accessToken(無論是在客戶端的cookie和數據庫用戶)
  4. 我就把我個人的要點,現在用一個例子: https://gist.github.com/Illniyar/5432646 也許會

也與用戶名密碼登錄時(至少是)

編輯總是使用https幫助你相處(雖然這有點混亂)。 令牌的工作原理與廣告一樣,但我還沒有使用護照,但將它移植到護照上應該不會太難。 還要注意用戶密碼的保存方式(每個用戶使用不同的鹽保護)以及如何執行註銷。

+0

我已經把我個人在一個要點中使用的例子: https://gist.github.com/Illniyar/5432646 也許它會幫助你,但它有點混亂。還沒有護照。 – 2013-04-22 05:53:11