10

我正在构建一个针对 iPhone 和其他移动设备的离线网络应用程序。有什么方法可以使用 WebSql 本地存储保存用户身份验证?

因此,当您在离线时打开 Web 应用程序时,我希望要么用户已经登录,要么用户应该能够登录。

4

2 回答 2

2

我不知道如何存储或使用客户端状态数据(iOS 中的钥匙串也在Android中),但对于 Web 应用程序而言,您无需执行任何操作。您不必做任何事情,因为如果可以的话,它是不安全的。登录后,服务器将设置仅存在几天或几周的HTTP cookie 。在这段时间内,向服务器发出的带有凭据的请求始终由浏览器进行身份验证。您可以从服务器请求登录电子邮件或其他任何内容。出于额外的安全目的,服务器可能会请求XSRF 令牌。在这种情况下,将其保存在 localStorage 中。失去这个令牌意味着什么。

这是最安全的方式,移动客户端也使用它,包括通过 WebView 进行的网上银行。使用浏览器进行身份验证是最安全和最简单的,因为存在很多弱点,例如凭据存储、检查正确的 ssl 证书、加密等。使用 webview,一切都由浏览器处理。

如果您对这些服务器代码的内容感兴趣,我对Appengine 跨域身份验证服务器代码进行了解释。

于 2012-11-18T14:49:15.927 回答
2

如果我正确理解了这个问题,那么您可以这样做:

登录时(在线):

  • 针对服务器进行身份验证,如果正确,将用户名和散列密码(例如使用Crypto JS)存储在 WebSql 数据库中。
  • 如果该帐户已经存在于本地数据库中,无论如何都要生成一个新的哈希值,以防用户自上次登录后更改了密码。

登录(离线)时:

  • 针对本地数据库进行身份验证。

当然,这将要求用户在本地登录之前至少使用在线版本登录一次。例如,当有人在断开连接的情况下尝试登录其 Microsoft 帐户时,Windows 8 就是这样做的。

于 2012-11-18T13:18:03.443 回答