【问题标题】:Offline Authentication with GWT使用 GWT 进行离线身份验证
【发布时间】:2015-01-12 17:30:14
【问题描述】:

我遇到了this 在线文档,从那里看到了关于 GWT 离线身份验证的幻灯片:

在线时,身份验证由服务器完成。

  • 然后我们应该能够在没有服务器的情况下重新验证​​他/她。 当心 !本地存储完全不安全!
  • 我们因此将用户的密码存储在浏览器中,加盐和 使用 SHA-3 加密。

    找到一个 Java SHA-3 实现,复制粘贴到项目中:
    String shaEncoded = SHA3.digest(String clearString);
    使用 GWT 18 的离线 HTML5 应用

问题是:

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

【问题讨论】:

    标签: java html authentication gwt


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 某处一定有盐吗?或者盐就在服务器中?
      • 您可以使用盐来防止对哈希本身的rainbow table 攻击。在这种情况下,您会将盐值存储在服务器上并使用它来生成这样的散列:将盐附加到密码并散列它。我通常做的是将用户名附加到哈希中。因此,即使是使用相同密码的两个用户也会得到不同的哈希值。
      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多