【问题标题】:Worklight Online + Offline AuthenticationWorklight 在线 + 离线身份验证
【发布时间】:2014-02-16 14:21:45
【问题描述】:

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

  1. 我的应用程序有两组功能。只有当应用程序连接到服务器并且用户通过身份验证时,才能访问一组功能。另一组功能可以离线访问,但它们需要来自加密 JSONStore 的数据。
  2. 我在客户端设备上有一个使用密码初始化的 JSONStore。因此,存储中的数据将被加密。此外,此 JSONStore 通过适配器同步到服务器上的数据库。
  3. 我还设置了另一个适配器,它使用存储在数据库中的另一组凭据对用户进行身份验证。只有当应用在线时,才能对用户进行身份验证。

我想做的是统一这两种方法,以便用户无需输入两组凭据即可访问这两组不同的功能。我想到的一种可能的解决方案是加密 JSONStore 并在没有用户干预的情况下执行适配器身份验证。但我不认为它是安全的。

有解决此问题的建议或方法吗?

【问题讨论】:

    标签: ibm-mobilefirst worklight-security


    【解决方案1】:

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

    要求:

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

    步骤:

    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 界面),哈希值将不同并且存储不会初始化。但是,用户应该已经使用新的/有效的凭据成功地通过了服务器的身份验证。向服务器询问旧哈希,使用旧哈希初始化存储,并根据新/有效凭据更改密码以将存储初始化为新哈希。例如:WL.JSONStore.changePassword(oldHash, newHash)

    可选:您可能需要考虑使用salt。例如:var salt = Math.random(), myHash = md5(loginField.getUser() + loginField.getPassword() + salt)

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

    【讨论】:

    • 我认为这种方法足以解决我的问题。当应用程序离线时,用户无法更改他的凭据,但没关系。我个人觉得 Worklight 应该为这个问题提供了一个更优雅的解决方案。谢谢。
    • 您能告诉我如何从我的客户端发送 HTTPS 请求吗?还是 Worklight 会自动通过 HTTPS 进行所有通信?
    • 如果您对 HTTPS 支持感兴趣,我建议您阅读您正在使用的应用程序服务器的文档。例如:Enabling SSL communication for the Liberty profile.
    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2022-09-23
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多