2011-10-24 110 views
12

我正在構建一個需要離線工作的網絡應用程序。該系統構建用於捕獲銷售交易。大部分的「離線」部分都相當簡單 - 我只需要在本地存儲數據並在我回到網絡時同步它。到現在爲止還挺好。離線網絡應用程序中的用戶身份驗證

問題在於身份驗證。該應用程序將在具有單個OS用戶帳戶的共享機器上運行。如果我離線,我如何驗證用戶?

用戶自己沒有任何需要隔離的私人數據(即我不必在客戶端保護它們)。我需要能夠驗證他們的密碼,這樣即使連接斷開,我也可以讓不同的用戶全天登錄。

我想到的一種方法涉及在IndexedDB中的客戶端上緩存密碼哈希值。只有有限的一組用戶將被允許從特定的共享機器登錄,所以我不需要在本地緩存我的整個密碼數據庫。假設我有一個很好的密碼策略(複雜性和過期要求)並且哈希本身是安全的(bcrypt),那麼這個想法有多可怕?

我還有其他的選擇嗎?

+0

從我讀過的密碼到期可能比有幫助的更有害 - http://www.cryptosmith.com/node/218雖然,如果你暴露你的數據庫可能不是這種情況。 –

回答

9

當機器無法訪問域控制器(例如,將筆記本電腦帶到飛機上並需要以無連接方式登錄到筆記本電腦)時,Windows(以及其他系統)的工作方式纔是有效的。您的機器已經記下了您的用戶名|密碼對的緩存,並會通過這些憑據讓您進入,即使它離線。

我認爲一般來說,存儲用戶名|密碼哈希是非常安全的,假設你合理地哈希它們(例如,使用鹽,使用IV等)。你需要考慮的一個風險就是讓散列文件「逃生」。如果這是敏感數據,你會非常小心 - 這可能不是可以接受的,但如果它不是超級敏感的數據,那麼你可能行:用好的哈希算法,我認爲你應該是合理的(但肯定不是完全)安全。

1

也許這是微不足道的,但我在我的nodejs項目中使用這種方法。 當用戶通過用戶名和密碼進行身份驗證時,他/她將被分配一個唯一的API密鑰,僅用於此特定會話。

每個用戶只能有一個API密鑰。

此API密鑰被添加到對服務器做出的任何請求中以對用戶進行身份驗證。

當用戶註銷時,API密鑰被刪除。此外,還可以在服務器上清除API密鑰,這使得用戶可以再次在服務器上進行身份驗證。

如果您感興趣,我可以提供使用此方法的nodejs開放源代碼程序的鏈接。

+0

我當然有興趣,請提供一個鏈接,如果仍然願意這樣做。 – GojiraDeMonstah

+0

給這個API密鑰,一個時間框架也是不錯的做法 – Serdar

+0

這篇文章是一個很好的資源來閱讀http://www.staticapps.org/articles/authentication-and-authorization – Serdar

相關問題