2015-10-17 68 views
1

訪問我想在一個Web應用程序的桌面客戶端使用PouchDB。我在計算機用戶通用的環境中工作,不同的人使用相同的計算機帳戶。但是,使用我的應用程序時,他們必須使用個人用戶名登錄,才能授予他們相應的權限。系統離線工作,並對服務器進行週期性複製。限制對本地PouchDB

翻閱PouchDB的文件,並在網上搜索我認識到,沒有訪問限制到本地PouchDB。任何訪問客戶端/瀏覽器的人原則上都可以訪問緩存的數據。在我的網絡應用程序中實現任何類型的用戶訪問控制似乎都是毫無意義的。代碼可以簡單地改變以允許訪問。

我來到了以下可能的解決方案,並想知道是否可以工作:

  1. 與中央服務器 應用程序發送用戶憑據到服務器第一次接觸。服務器使用用戶憑據加密特殊的數據庫密鑰,並將此encryptedDatabaseKey發送回客戶端應用程序。客戶端應用程序將這個encryptedDatabaseKey存儲在localStorage中,解密所包含的databaseKey,使用這個databaseKey(例如crypto-pouch)創建和加密本地PouchDB。
    1. 離線使用 用戶登錄到應用程序,其憑證用於解密localStorage中的encryptedDatabaseKey,然後才能訪問存儲的數據。如果有人更改了應用程序的代碼,他仍然無法訪問加密的PouchDB。

我看到了如下優點: - 如果沒有正確的憑據沒有對本地數據 沒有訪問 - 多個用戶可以同時訪問同一個本地PouchDB因爲databaseKey是相同的。 - 該databaseKey甚至可以定期更換(應用從服務器接收到的本地encryptedDatabaseKey和一個服務器的連接時比較,如果它們不同的應用程序解密使用的數據庫舊密鑰,並用新加密的話)

這似乎是一個可行的解決方案嗎?有沒有其他更好的方法來保護當地的PouchDB?

回答

0

crypto-pouch確實是加密本地PouchDB的最佳方法。不過,我認爲,你說

脫機使用,用戶登錄到應用程序,他的憑據用於解密的localStorage的encryptedDatabaseKey,纔有他訪問存儲的數據

我認爲這是毫無意義的解密密鑰並使用它來解密數據庫;你可能就像用戶創建並記住密碼一樣?然後你可以使用它作爲crypto-pouch的關鍵。

+0

感謝您的回覆。該應用程序將部署在國際上,技術人員非常低,波動大。我懷疑第二種關鍵方法是行得通的......除此之外,組織傾向於使用「通用」用戶。所以每個坐在它前面的人都有一個用戶帳戶,理想情況下他們共享相同的數據庫。 – TylerDurden