Worklight JSONStore拒绝某些用户密码而不拒绝其他用户密码

时间:2014-05-16 20:49:49

标签: ibm-mobilefirst jsonstore

这里有一个奇怪的。 iOS 7.1上的Worklight 6.1.0.01中的JSONStore似乎是在任意拒绝某些密码。

以下是我们用于初始化JSONstore的代码:

var bitArray = sjcl.hash.sha256.hash(username + ':'+ password);
var digest_sha256 = (sjcl.codec.hex.fromBits(bitArray));

options.username = username
options.password = digest_sha256;

options.localKeyGen =  true;
options.clear = false;
collections[this.collection1] = collection1;
collections[this.collection2] = collection2;
collections[this.collection3] = collection3;

WL.JSONStore.init(collections, options).then(function() {
    onSuccess();
}).fail(function(errorObject) {
    onFailure();
});

我有一个用户:ad1tst密码: 此用户的sha256哈希输出为b5de1dfbbd09c5f8cf78d858eb4ed09e3b9826f9c35c950d164e8accf7775082

使用此哈希作为密码,用户可以初始化数据库。

我有另一个用户ad2tst密码: sha256的输出对于这个用户来说是 607c04ef944b36ec939d39f7c6b24757776918b8425e5a3b912738d6dea0ebea

使用此哈希作为密码,此用户无法初始化数据库。

如果用户ad2tst使用密码(给出散列1feff7f75cfd73fc796d9dd612261b3f72f4292ce76ae3a5e92f7b1dbb2fd038),则用户可以初始化数据库。

此问题不仅限于这两个测试用户。我们有现场用户表现出相同的问题。

我们从JSONStore运行时收到以下错误:

__33-[JsonStoreQueue setDatabaseKey:]_block_invoke [Line 128] Invalid password
2014-05-16 16:39:26.611 Audits[865:60b] THREAD WARNING: ['StoragePlugin'] took '71.429932' ms. Plugin should use a background thread.
2014-05-16 16:39:26.612 Audits[865:60b] [ERROR] [wl.jsonstore] {"src":"initCollection","err":-3,"msg":"INVALID_KEY_ON_PROVISION","col":"collection1","usr":"ad2tst","doc":{},"res":{}}

INVALID_KEY_ON_PROVISION错误是由JSONStore插件的'provision'方法生成的,该方法位于Worklight本机代码的深处。

跟随下面的一个尝试答案;每次运行应用程序都是在干净安装下完成的。测试周期是:

  1. 安装应用
  2. 与其中一位测试用户一起运行
  3. 观看失败或通过,具体取决于提供的用户名/密码对
  4. 删除应用
  5. 转到第1步
  6. 因此,这不是数据库已使用其他密码加密的情况。

2 个答案:

答案 0 :(得分:1)

配置上的无效密钥意味着您首先使用一个密码加密商店,然后尝试使用另一个(错误的)密码打开它。

在尝试使用新密码之前,请确保使用其他用户名或先破坏商店。

如果您销毁商店,然后使用其他密码,则应该使用它。

答案 1 :(得分:1)

如果您有疑问,StackOverflow是一个获得答案的好地方。但是,对于错误报告,我建议opening a PMR。如果您正在寻找新功能,我建议opening a feature request。这不是处理这两个问题的正确场所。

我想指出一些事情:

与使用Shared Preferences持久保存加密数据保护密钥(DPK)的Android不同。 iOS使用Keychain代替。在这些差异中,卸载应用程序时将删除共享首选项中的数据。除非采取其他步骤,否则卸载应用程序时不会删除钥匙串中的数据。这是一个answer,显示了在重新安装应用程序时如何清除钥匙串。我相信有一个用于处理NSUserDefaults的Worklight Hybrid API,记录在案here。我还没有真正使用它,所以你的millage可能会有所不同。共享首选项和JSONStore的Keychain的使用记录在here

如果您每次重新安装应用程序时始终调用JSONStore destroy API,我认为您的问题将已修复(或至少已缓解),这样您就可以获得Android展示的行为相同。如果在使用新的用户名和密码调用closeAll API之前调用init API,则可以使用相同的应用程序与各种用户合作。 changePassword API将更新用于访问商店内容的密码。

我根据您的问题制作了一个新的QUnit test,看看here。我们的想法是用一个用户+通过,添加,查找和关闭来打开商店。然后用另一个用户打开另一个商店+通过,添加,关闭,再次打开并查找存储的数据。所述测试用例使用Worklight v6.1传递iOS 7.1。请注意,我使用您的输入作为用户名和密码:

  • ad1tst + b5de1dfbbd09c5f8cf78d858eb4ed09e3b9826f9c35c950d164e8accf7775082
  • ad2tst + 607c04ef944b36ec939d39f7c6b24757776918b8425e5a3b912738d6dea0ebea

重申我的答案是:

  • 如果您想报告问题,请打开PMR。我希望我上面的建议能解决它,但它可能是其他的东西被打破了,我误解了这个问题。
  • 如果您想要更好的API来处理特定的用户场景,请打开功能请求。我认为提交的用例是有效的,这是值得追求的。