2012-11-18 105 views
8

我正在構建一款針對iPhone和其他移動設備的離線網絡應用程序。我們可以通過WebSql本地存儲保存用戶身份驗證嗎?如何讓用戶登錄離線網絡應用程序?

所以,當你打開web應用程序,而它的下線,我想在完成登錄用戶或用戶應該能夠登錄。

+2

有趣的問題,這意味着你將不得不在本地存儲用戶證書,這是不是很安全。想知道是否有任何安全的方法或實現這一目標的最佳做法。 –

+1

只需要思考一下 - 如果按照定義檢查證書是否在javascript中在客戶端上完成,那麼對於某人通過在應用程序中擺弄js屬性來模擬/繞過驗證將是微不足道的。然後假設,例如,當您重新聯機時客戶端數據已同步到服務器,這可能會導致問題。 – user888734

回答

1

如果我理解正確的問題,這就是你怎麼可能做到這一點:

登錄時(在線):針對服務器

  • 身份驗證,如果它是正確的,存儲在數據庫中的WebSQL的用戶名和散列密碼(例如使用Crypto JS)。
  • 如果該帳戶已經存在於本地數據庫中,那麼在用戶上次登錄後更改密碼的情況下,還是會生成新的散列值。

登錄時(離線):

  • 身份驗證針對本地數據庫。

這當然會要求用戶在本地登錄之前至少使用在線版本登錄一次。例如,當有人嘗試在斷開連接時登錄其Microsoft帳戶時,Windows 8就會這樣做。

1

我不知道如何存儲或使用客戶端狀態數據(keychain in iOS也在Android),但對於Web應用程序的角度來看,你不必做任何事情。你不必做任何事情,因爲如果可以的話,它是不安全的。登錄後,服務器將設置生存幾天或幾周的HTTP only cookie。在這段時間內,向服務器請求with credentials始終由瀏覽器進行身份驗證。您可以請求登錄電子郵件或任何從服務器。爲了額外的安全目的,服務器可以請求XSRF token。在這種情況下,將其保存在localStorage中。鬆開這個令牌意味着不多。

這是最安全的方式,它也被移動客戶端使用,包括通過WebView的網上銀行。使用瀏覽器進行身份驗證是最安全和最簡單的,因爲存在很多薄弱點,例如憑證存儲,檢查正確的SSL證書,加密等。使用webview,瀏覽器會處理所有事情。

如果您有興趣瞭解這些服務器代碼是如何使用的,我已通過Appengine cross domain authentication server code解釋。

相關問題