0

我想在worklight中使用JsonStore保護實現應用程序,我希望根據登錄用戶存儲密碼並將這些密碼添加到WL.JSONStore.init(collections,options)中的選項中。數據對象data={}中的其餘細節;如何在JsonStore Worklight 6.2中實現密碼保護安全性?

以及如何提取密碼保存WL.JSONStore.init(collections,options)選項對象用於使API調用其餘的功能?

回答

1

我採取了一個問題:

存儲在設備中的密碼的確不是一個好的做法遵循。

還有一個額外的問題,用戶名和密碼來自哪裏?什麼時候註冊(而不是登錄)?這是IMO的重要信息。

在我的一個應用程序中,我初始化了一個JSONStore,並使用用戶的密碼對其進行了加密,並在集合中保存了用戶名。

這樣,下次用戶嘗試打開JSONStore(讀取:「登錄」)時,它將嘗試使用輸入的密碼執行此操作。如果此步驟成功,則會將輸入的用戶名與存儲的用戶名進行比較。如果此步驟也成功,則可以假定有效的登錄憑據。

var collections = { 
    userCredentials : { 
     searchFields : { 
      username: 'string' 
     } 
    } 
}; 

var username, password; 

username = $("#username").val(); 
password = $"("#password").val(); 

WL.JSONStore.init(collections, {password:password}) 
// first step is successful 
.then(function() {   
    return WL.JSONStore.get("myCollectionName").find({username:username}); 
}) 
// second step is successful 
.then(function(searchResult) { 
    if (searchResult[0].json.username == username) { 
     // valid login. 
    } 
}) 
.fail(function() { 
    alert ("Invalid credentials, try again.); 
}) 

注意上面的代碼是一個有點抽象和「通用」,你會需要處理所有種類的邊緣情況。
我強烈推薦徹底閱讀全部JSONStore documentationtraining modules

+0

事實上,這與用戶每次輸入密碼時的第一個選項相同。但有些情況下用戶不需要(例如記住我的功能),我們需要將它存儲在設備的某個位置,最好的選擇是IMO,它是OS的安全存儲。 iOS Keychain是每個應用程序...所以,它不能從其他應用程序訪問(除非iOS或應用程序本身存在安全漏洞)。 – 2014-09-05 12:20:12

+0

您可以在應用程序之間共享鑰匙串中的項目,還有一個稱爲簡單數據共享的Worklight功能,可以在文檔[此處](http://www-01.ibm.com/support/)上閱讀關於它的更多信息。 knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/devref/c_simple_data_sharing_overview.html)。 – cnandreu 2014-09-05 14:30:03

1

你有兩個選擇(雖然我不是一個安全專家):

  1. 問到使用的應用程序(並因此JSONStore)用戶每次打開應用程序,然後花時間去輸入密碼在WL.JSONStore.init方法中檢查密碼(如果密碼正確,商店將打開,否則該方法將失敗)。

  2. 將密碼存儲在安全存儲 - 鑰匙鏈中。對於iOS,請參閱此link。對於Android,我認爲這相當於link

因此,用戶打開應用程序中的第一次,你存儲密碼和每個用戶打開應用程序時,您找回密碼,並把它傳遞給WL JSONStore。如果用戶想要更新密碼(例如您有安全策略要遵循),則必須更新鑰匙串中的密碼。

當然,如果你去混合使用,你需要一些Cordova插件來添加,讀取,更新,重置鑰匙串中的密碼,這樣你就可以使用JavaScript進行這些操作。

希望它有幫助!