如何让用户登录离线Web应用?

10

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

因此,当您在离线状态下打开Web应用程序时,我希望用户已经登录或用户能够登录。


2
有趣的问题,这意味着您将不得不在本地存储用户凭据,这并不是非常安全的。不知道是否有任何安全的方式或最佳实践来实现这一点。 - Gurpreet Singh
1
只是一些需要思考的事情 - 如果检查凭据在 JavaScript 中是在客户端上进行的,那么很容易有人通过调整应用程序中的 js 属性来模拟/绕过身份验证。然后假设,例如,在您重新联机时将客户端数据同步到服务器,这可能会引起问题。 - user888734
2个回答

2
如果我理解问题正确,您可以这样做:
在在线登录时:
- 对服务器进行身份验证,如果正确,则将用户名和哈希密码(例如使用 Crypto JS)存储在WebSql数据库中。 - 如果该帐户已存在于本地数据库中,则无论如何生成新的哈希值,以防用户自上次登录以来更改了密码。
在离线登录时:
- 对本地数据库进行身份验证。
当然,这需要用户至少使用在线版本登录一次,然后才能在本地登录。例如,当有人尝试在断开连接时登录其Microsoft帐户时,Windows 8就是这样做的。

2
我不知道如何存储或使用客户端状态数据(iOS中的钥匙串也适用于Android),但从Web应用程序的角度来看,您无需做任何事情。您无需做任何事情,因为如果您可以这样做,那么它就不安全。登录后,服务器将设置仅限HTTP cookie,其有效期为几天或几周。在此期间,带有凭据的请求始终由浏览器进行身份验证。您可以从服务器请求登录电子邮件或其他内容。出于额外的安全目的,服务器可能会请求XSRF token。在这种情况下,请将其保存在localStorage中。丢失此令牌并没有什么影响。
这是最安全的方式,也被移动客户端使用,包括通过 WebView 进行的网银。使用浏览器进行身份验证是最安全和最简单的,因为有很多弱点,如凭据存储、检查正确的 SSL 证书、加密等。通过 Webview,浏览器会处理所有事情。
如果您对这些服务器代码感兴趣,我已经解释过了Appengine跨域身份验证服务器代码

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接