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进行这些操作。

希望它有帮助!