Worklight 在线 + 离线身份验证

2024-04-13

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

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

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

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


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

要求:

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

Steps:

  1. 用户第一次输入正确的凭据并成功通过服务器进行身份验证时:对凭据进行哈希处理。例如:var myHash = md5(loginField.getUser() + loginField.getPassword())。你可以找到Github 上的 md5 JavaScript 库 https://github.com/blueimp/JavaScript-MD5.
  2. 使用该哈希来初始化存储。例如:WL.JSONStore.init(..., {password: myHash}).
  3. 将哈希值发送到后端HTTPS http://en.wikipedia.org/wiki/HTTP_Secure,如果用户更改他/她的凭据,您将需要它。无需在设备上保存凭据或哈希值(loginField = null; myHash = null)。或者,您可以只在服务器上生成哈希值并将其存储,而无需客户端将其发回,只需确保客户端和服务器使用相同的哈希算法即可。
  4. 离线工作时,询问用户他/她的凭据,对其进行哈希处理并使用它来访问商店内的数据。
  5. 如果用户更改他/她的凭据(例如通过应用程序的 Web 界面),哈希值将会不同,并且存储不会初始化。但是,用户应该已使用新的/有效的凭据成功通过服务器的身份验证。向服务器请求旧哈希值,使用旧哈希值初始化存储,然后根据新/有效凭据更改密码以将存储初始化为新哈希值。例如:WL.JSONStore.changePassword(oldHash, newHash).

选修的:您可能需要考虑使用salt http://en.wikipedia.org/wiki/Salt_(cryptography)。例如:var salt = Math.random(), myHash = md5(loginField.getUser() + loginField.getPassword() + salt).

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Worklight 在线 + 离线身份验证 的相关文章

随机推荐

  • Clojure:将哈希映射键字符串转换为关键字?

    我使用 Aleph 从 Redis 提取数据 apply hash map r hgetall key medication id 问题是这些数据返回时带有键字符串 例如 name Tylenol how instructions 当我需要
  • MySQL ORDER BY 带 % 的字段

    我正在尝试使用通配符进行 ORDER BY FIELD 工作 但没有成功 SELECT positions departments dept name departments dept url divisions dept name AS
  • 营销人员的网络表单动态地形成字段条件可见性

    我们使用 WFFM 来创建登陆页面 我们的营销人员很容易使用它 现在 我们正在考虑定制它们 例如 我们有以下需求 在我们的表单上 我们显示居住国家 地区 但是当您选择某些国家 地区时 我们希望再显示一个名为的下拉菜单state provin
  • ADT eclipse xml 布局文本编辑器 - 在文件关闭并重新打开之前经常损坏[重复]

    这个问题在这里已经有答案了 可能的重复 移动和消失的代码行 Eclipse 的 XML 编辑器出现问题 https stackoverflow com questions 10030727 moving and vanishing line
  • 使用 big.matrix 对象计算欧几里德距离矩阵

    我有一个类对象big matrix in R有尺寸778844 x 2 这些值都是整数 公里 我的目标是使用以下公式计算欧几里德距离矩阵big matrix并因此得到一个类的对象big matrix 我想知道是否有最佳方法可以做到这一点 我
  • Scrum 燃尽模式 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我所在的团队由 10 人组成 负责处理大型遗留代码库 但产品负责人不太理想 我们的积压工作状况非常糟糕 大型史诗经常破坏我们的冲刺 该团队
  • 如何在 Android 上以编程方式设置进度条的样式

    我在 style xml 中有 ProgressBar 样式 当我创建布局时 放置 ProgressBar 并设置样式 例如 style style ProgressBarStyle 将布局设置为对话框 一切都很好 其他方式以编程方式创建对
  • 安装 PCRE 时出错

    我正在尝试在我的 Ubuntu 11 10 服务器上安装 PCRE 当我运行 make 命令时 我得到一个非常长的输出 它总是以这个错误结束 libtool link cd libs rm f libpcreposix la ln s li
  • Join 中的用例声明

    大家好 我想使用此查询在连接中使用 case 语句 但出现错误 Select CONVERT VARCHAR 10 SII SIDATE 103 DATE SII SALEID SII ItemName SI TenancyID FROM
  • 在 Mongoose 中使用 AND 组合两个 OR 查询

    我想在 Mongoose 中使用 AND 组合两个 OR 查询 就像这个 SQL 语句一样 SELECT FROM WHERE a 1 OR b 1 AND c 1 OR d 1 我在 NodeJS 模块中尝试了此操作 该模块仅从主应用程序
  • 在 SQL 中比较图像

    与数据库中的图像进行比较的最佳方法是什么 我尝试比较它们 Image 是 Image 类型 Select from Photos where Photo Image 但收到错误 数据类型图像和图像在等于运算符中不兼容 由于图像数据类型是二进
  • 在 Twitter Fabric 中使用自定义登录按钮?

    我一直在尝试使用普通按钮来使用 twitter sdk 执行身份验证过程 但它似乎不起作用 有人尝试过类似的事情吗 我已经正确设置了 API 密钥等 登录过程正确执行 但回调部分似乎没有被调用 我的日志都没有被执行 成功或失败部分都没有 T
  • 具有多个逗号分隔值的返回语句[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 语法 逗号是什么意思 https stackoverflow com questions 3561043 javascript syntax what comma means 这
  • 使用jsPDF在服务器端保存pdf

    我有一个应用程序 可以生成一个 HTML 页面 其中包含用户可以编辑的数据 最后我用 jsPDF 生成了一个 pdf 文件 有什么方法可以将生成的 pdf 保存在服务器端数据库中吗 我正在使用 PrimeFaces 提前致谢 为其他用户更新
  • 如何强制 Typescript 中的所有变量都声明类型

    据我所知 当你在Typescript中声明变量时 你可以选择是否为变量指定类型 如果未指定类型 则使用默认的 any 类型 有没有办法强制所有变量都声明类型 即使它可能是 任何 例如 当未指定类型时 我希望出现编译器错误 这样一来 程序员将
  • 如何使 Django slugify 与 Unicode 字符串正常工作?

    我能做什么来预防slugify过滤器去除非 ASCII 字母数字字符 我使用的是 Django 1 0 2 编程网 http cnprog com有问题的网址中有中文字符 所以我查看了他们的代码 他们没有使用slugify在模板中 相反 他
  • Ace 代码编辑器动态设置语言 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试通过下拉菜单来选择语言来实现 Ace 代码编辑器 我的下拉菜单有一个模式 ID 我已经让编辑器正常工作 但我无法像我希望
  • JNI 和 Java:ant 调用 make 还是 make 调用 ant?

    我即将第一次进入 JNI Java 本机接口 的世界 以提供从平台特定的 C C 代码到 Java 的文件系统更改通知 除非有人推荐一些我错过的出色的图书馆来做这件事 作为 JNI 的新手 我已经设法找到了很多关于 JNI 接口方面和库生成
  • 避免从存储过程返回结果集

    假设我有一些返回结果集的存储过程 并且我无法更改它 create procedure test procedure as begin select 1 end 我知道我可以将结果集插入表中 因此它将对调用代码隐藏 declare t tab
  • Worklight 在线 + 离线身份验证

    我正在尝试通过 Worklight 实现以下目标 我的应用程序有两组功能 仅当应用程序连接到服务器并且用户经过身份验证时才能访问一组功能 另一组功能可以离线访问 但它们需要来自加密 JSONStore 的数据 我在客户端设备上有一个 JSO