Ibm mobilefirst Worklight Online+;脱机身份验证

Ibm mobilefirst Worklight Online+;脱机身份验证,ibm-mobilefirst,worklight-security,Ibm Mobilefirst,Worklight Security,我正试图通过Worklight实现以下目标 我的应用程序有两套功能。只有当应用程序连接到服务器并且用户经过身份验证时,才能访问一组功能。另一组功能可以脱机访问,但它们需要来自加密JSONStore的数据 我在客户端设备上有一个JSONStore,它是使用密码初始化的。因此,存储中的数据将被加密。此外,此JSONStore通过适配器同步到服务器上的数据库 我还设置了另一个适配器,它通过使用存储在数据库中的另一组凭据对用户进行身份验证。只有当应用程序联机时,才能对用户进行身份验证 我想做的是统一这两

我正试图通过Worklight实现以下目标

  • 我的应用程序有两套功能。只有当应用程序连接到服务器并且用户经过身份验证时,才能访问一组功能。另一组功能可以脱机访问,但它们需要来自加密JSONStore的数据
  • 我在客户端设备上有一个JSONStore,它是使用密码初始化的。因此,存储中的数据将被加密。此外,此JSONStore通过适配器同步到服务器上的数据库
  • 我还设置了另一个适配器,它通过使用存储在数据库中的另一组凭据对用户进行身份验证。只有当应用程序联机时,才能对用户进行身份验证
  • 我想做的是统一这两种方法,这样用户就不需要输入两组凭据来访问这两组不同的功能。我想到的一个可能的解决方案是只加密JSONStore并在没有用户干预的情况下执行适配器身份验证。但我认为它不安全


    有什么建议或方法可以解决这个问题吗?

    以下只是一个想法,我不是安全专家

    要求:

    • 要使用脱机功能,您必须至少联机一次并通过身份验证
    • 您的应用程序必须具有登录视图才能输入一些凭据(例如用户名/电子邮件和密码)
    步骤:

  • 用户第一次输入正确的凭据并成功与服务器进行身份验证时:哈希凭据。例如:
    var myHash=md5(loginField.getUser()+loginField.getPassword())
    。你可以找到
  • 使用该散列初始化存储。例如:
    WL.JSONStore.init(…,{password:myHash})
  • 通过将哈希发送到后端,如果用户更改其凭据,您将需要它。无需在设备上保存凭据或哈希(
    loginField=null;myHash=null
    )。或者,您可以在服务器上生成散列并存储它,而无需客户端将其发送回,只需确保客户端和服务器使用相同的散列算法即可
  • 脱机工作时,要求用户提供其凭据,对其进行散列,并使用该凭据访问存储区内的数据
  • 如果用户更改其凭据(例如,通过应用程序的web界面),散列将不同,并且存储不会初始化。但是,用户应该已经使用新的/有效的凭据成功地与服务器进行了身份验证。向服务器请求旧散列,使用旧散列初始化存储,并根据新的/有效的凭据更改密码以将存储初始化为新散列。例如:
    WL.JSONStore.changePassword(oldHash,newHash)
  • <强>可选:您可能想考虑使用。例如:

    var salt=Math.random(),myHash=md5(loginField.getUser()+loginField.getPassword()+salt)


    您需要将盐存储在某个地方,以便在用户返回应用程序后重新生成哈希。您应该能够初始化另一个未加密的存储来持久化它。例如
    WL.JSONStore.init(…,{username:'metadata'})。然后(function(){/*addsalt to store*/})
    。更多关于使用两家商店的信息。

    我认为这是一种足以解决我问题的好方法。当应用程序脱机时,用户无法更改其凭据,但可以。我个人认为Worklight应该为这个问题提供一个更优雅的解决方案。谢谢。你能告诉我如何从我的客户那里发送HTTPS请求吗?或者Worklight会自动通过HTTPS进行所有通信吗?如果您对HTTPS支持感兴趣,我建议您阅读正在使用的应用程序服务器的文档。例如:。