0

我想使用 JsonStore 保护在 worklight 中实现应用程序我想根据登录用户存储密码并将这些密码添加到WL.JSONStore.init(collections,options). 数据对象中的其余细节data={}

以及如何提取密码保存的WL.JSONStore.init(collections,options)选项对象以对其余功能进行 api 调用?

4

2 回答 2

1

您有两种选择(尽管我不是安全专家):

  1. 每次打开应用程序时要求使用应用程序(以及 JSONStore)的用户输入密码,然后在 WL.JSONStore.init 方法中检查密码(如果密码正确,商店将打开,否则,该方法将失败)。

  2. 将密码存储在安全存储 - 钥匙串中。对于 iOS,请参阅此链接。对于 Android,我认为这是等效的链接

因此,用户第一次打开应用程序时,您存储密码,每次用户打开应用程序时,您检索密码并将其传递给 WL JSONStore。如果用户想要更新密码(例如,您需要遵循安全策略),您必须更新钥匙串中的密码。

当然,如果您使用混合,您将需要某种 Cordova 插件来添加、读取、更新、重置钥匙串中的密码,以便您可以通过 JavaScript 进行这些操作。

希望能帮助到你!

于 2014-09-05T11:19:19.680 回答
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 文档培训模块

于 2014-09-05T11:36:02.337 回答