Worklight Online +离线验证

时间:2014-01-25 15:03:27

标签: ibm-mobilefirst worklight-security

我正在尝试通过Worklight实现以下目标。

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

    任何解决此问题的建议或方法?

1 个答案:

答案 0 :(得分:2)

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

<强>要求:

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

<强>步骤:

  1. 用户首次输入正确的凭据并成功通过服务器进行身份验证:对凭据进行哈希处理。例如:var myHash = md5(loginField.getUser() + loginField.getPassword())。你可以找到md5 JavaScript libraries on Github
  2. 使用该哈希初始化商店。例如:WL.JSONStore.init(..., {password: myHash})
  3. 通过HTTPS将哈希发送到后端,如果用户更改了他/她的凭据,您将需要它。无需在设备上保存凭据或哈希值(loginField = null; myHash = null)。或者,您可以在服务器上生成哈希并存储它,而无需客户端将其发回,只需确保客户端和服务器都使用相同的哈希算法。
  4. 离线工作时,询问用户他/她的凭据,哈希并使用它来访问商店内的数据。
  5. 如果用户更改了他/她的凭据(例如,通过您的应用程序的Web界面),则散列将不同,并且store不会初始化。但是,用户应使用新的/有效凭据成功通过服务器进行身份验证。向服务器询问旧散列,使用旧散列初始化存储,并根据新/有效凭据更改密码以将存储初始化为新散列。例如:WL.JSONStore.changePassword(oldHash, newHash)
  6. 可选:您可能需要考虑使用salt。例如:var salt = Math.random(), myHash = md5(loginField.getUser() + loginField.getPassword() + salt)

    您需要将salt存储在某处,以便在用户返回应用程序后重新生成哈希值。你应该能够启动另一个未加密的商店来坚持它。例如WL.JSONStore.init(..., {username: 'metadata'}).then(function(){/*add salt to store*/})。有关使用两个商店的更多信息here