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

Ibm mobilefirst Worklight JSONStore拒绝某些用户密码而不是其他密码,ibm-mobilefirst,jsonstore,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 =

这里有个奇怪的。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哈希输出为B5DE1DBBD09C5F8CF78D858EB4ED09E3B9826F9C35C950D164E8ACCF77775082

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

我有另一个用户ad2tst密码: 此用户的sha256的输出为 607c04ef944b36ec939d39f7c6b24757776918b8425e5a3b912738d6dea0ebea

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

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

这个问题不仅仅局限于这两个测试用户。我们的实时用户也表现出同样的问题

我们从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":{}}
无效的\u KEY\u ON\u PROVISION错误是由位于Worklight本机代码深处的JSONStore插件的“PROVISION”方法生成的

在下面的一个尝试性回答之后;应用程序的每次运行都是在干净的安装上完成的。试验循环为:

  • 安装应用程序
  • 与其中一个测试用户一起运行
  • 根据提供的用户名/密码对,观察其失败或通过
  • 删除应用程序
  • 转到步骤1

  • 因此,这不是数据库已经用另一个密码加密的情况。

    设置上的无效密钥意味着您首先用一个密码加密了存储,然后试图用另一个(错误)密码打开它

    在尝试使用新密码之前,请确保您使用的是其他用户名,或者先销毁存储


    如果你破坏了商店,然后使用了其他密码,它应该可以使用。

    如果你有问题,StackOverflow是一个获取答案的好地方。不过,对于bug报告,我建议。如果你正在寻找一个新的功能,我建议。这不是处理这两个问题的正确地点

    有几件事我想指出:

    与Android不同,Android使用加密数据保护密钥(DPK)进行持久化。iOS使用的是。在这些差异中,卸载应用程序时会删除共享首选项中的数据。除非采取其他步骤,否则卸载应用程序时不会删除密钥链中的数据。下面是一个示例,演示了在重新安装应用程序时如何清除密钥链。我相信有一个Worklight混合API可以使用,这是有文档记录的。我还没有真正使用过它,所以你的单位可能会有所不同。JSONStore的共享首选项和密钥链的使用已记录在案

    如果每次重新安装应用程序时总是调用JSONStore
    destroy
    API,我认为您的问题将得到解决(或者至少得到缓解),这样您将获得与Android相同的行为。如果在使用新用户名和密码调用
    init
    API之前调用
    closeAll
    API,则可以使用同一应用程序与不同的用户协作。
    changePassword
    API将更新用于访问存储中内容的密码

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

    • ad1tst
      +
      B5DE1DBBD09C5F8CF78D858EB4ED09E3B9826F9C35C950D164E8ACCF77582
    • ad2test
      +
      607c04ef944b36ec939d39f7c6b24757776918b8425e5a3b912738d6dea0ebea
    我只想重申我的答案:

    • 如果要报告问题,请打开PMR。我希望我上面的建议能解决这个问题,但可能是别的什么东西坏了,我误解了这个问题
    • 如果需要更好的API来处理特定的用户场景,请打开功能请求。我认为所提供的用例是有效的,这是值得追求的
    在上述缺陷的情况下,每次运行都是在刚刚安装的干净应用程序上完成的,因此之前没有jsonstore数据库的副本。测试周期为:1)安装应用程序,2)与其中一个测试用户一起运行,3)观察其失败或通过,4)删除应用程序,5)重复步骤1。所以,虽然你的观点是正确的,但它并不适用于这种情况。事实上,它仍然可能是正确的,这取决于你所说的“干净的应用程序”是什么意思。如果您删除了旧的应用程序并安装了新的应用程序,但在任何情况下都没有调用destroy,并且没有清除密钥链,那么如果您使用相同的用户名,它仍然会为该应用程序存储密钥。这是因为在删除应用程序后,iOS密钥链不会被清除。这是一种不太可能的情况,但也可能是这里正在发生的事情。丹尼尔:我想这是IBM员工的一个问题,WL是否将密码存储在钥匙链中?此外,尽管需要调用destroy,但这是一种解决方法,但这并不是很干净,因为用户可以在应用不知情的情况下随时删除应用。因此,应用程序始终需要检查是否在设备上第一次运行,如果是第一次运行,请销毁JSONstore,以防它实际上不是应用程序在设备上的第一次运行。是的,安全工件(不是密码本身,而是与密码相关)存储在密钥链中。这似乎是一个缺陷。您能确认这是正在发生的吗?我们通过保留一个用户首选项来解决问题,该选项指示