2012-11-18 107 views
8

我正在构建一款针对iPhone和其他移动设备的离线网络应用程序。我们可以通过WebSql本地存储保存用户身份验证吗?如何让用户登录离线网络应用程序?

所以,当你打开web应用程序,而它的下线,我想在完成登录用户或用户应该能够登录。

+2

有趣的问题,这意味着你将不得不在本地存储用户证书,这是不是很安全。想知道是否有任何安全的方法或实现这一目标的最佳做法。 –

+1

只需要思考一下 - 如果按照定义检查证书是否在javascript中在客户端上完成,那么对于某人通过在应用程序中摆弄js属性来模拟/绕过验证将是微不足道的。然后假设,例如,当您重新联机时客户端数据已同步到服务器,这可能会导致问题。 – user888734

回答

1

如果我理解正确的问题,这就是你怎么可能做到这一点:

登录时(在线):针对服务器

  • 身份验证,如果它是正确的,存储在数据库中的WebSQL的用户名和散列密码(例如使用Crypto JS)。
  • 如果该帐户已经存在于本地数据库中,那么在用户上次登录后更改密码的情况下,还是会生成新的散列值。

登录时(离线):

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

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

1

我不知道如何存储或使用客户端状态数据(keychain in iOS也在Android),但对于Web应用程序的角度来看,你不必做任何事情。你不必做任何事情,因为如果可以的话,它是不安全的。登录后,服务器将设置生存几天或几周的HTTP only cookie。在这段时间内,向服务器请求with credentials始终由浏览器进行身份验证。您可以请求登录电子邮件或任何从服务器。为了额外的安全目的,服务器可以请求XSRF token。在这种情况下,将其保存在localStorage中。松开这个令牌意味着不多。

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

如果您有兴趣了解这些服务器代码是如何使用的,我已通过Appengine cross domain authentication server code解释。

相关问题