使用 GWT 进行离线身份验证

Offline Authentication with GWT

我看到 this 联机文档,那里有关于 GWT 离线身份验证的幻灯片:

在线时,认证由服务器完成。

问题是:

  1. 是否真的可以使用这种方法安全地验证 GWT 应用程序?如果它是 SHA-3 编码的,它真的会使其安全吗?
  2. 当用户在浏览器中获得身份验证时,然后用户使用离线应用程序,说保存东西,然后肯定它只是存储在 HTML5 存储中,但是用户信息可能嵌入在任何保存的内容中。因此,当应用重新上线时,它将同步到服务器。这是如何安全的?服务器会接受它正在同步的东西确实来自正确的用户吗?

关于身份验证,离线没有特殊情况。它的工作原理与在线相同。

您通常会在客户端的浏览器中存储一个带有会话信息的 Cookie,用于向服务器验证客户端(当您发出请求时)。 只要会话信息在后端持久存在,您就可以重新验证用户。

您不能在客户端存储密码。它足以在客户端上存储一些会话信息(在 Cookie 或 LocalStorage 中)并使用它来验证用户。

实际上,您在浏览器中存储的不是密码本身,而是它的 SHA-3 哈希值。 从密码学的角度来看,这种方法非常安全,因为它不容易找回原始密码。

只需注意: 您的代码将存储在客户端,客户端上的每个源代码都可以被篡改。因此,恶意用户也可能能够阅读和利用它。 但别担心,对于离线可用应用程序的普通用例,这已经足够安全了。

长时间 运行 服务器会话我会做什么: 在服务器端生成一个随机 ID,将其与用户相关联并将其存储在数据库中。 将 ID 设置为客户端上的 cookie,并在用户未登录且 cookie 中仍有此 ID 时重新验证用户。 要限制时间量,您可以在服务器端添加超时值,超过该 ID 将被丢弃。