我正在构建一个针对iPhone和其他移动设备的离线Web应用程序。是否有任何方法可以使用WebSql本地存储来保存用户身份验证? 因此,当您在离线状态下打开Web应用程序时,我希望用户已经登录或用户能够登录。
如果我理解问题正确,您可以这样做:在在线登录时:- 对服务器进行身份验证,如果正确,则将用户名和哈希密码(例如使用 Crypto JS)存储在WebSql数据库中。 - 如果该帐户已存在于本地数据库中,则无论如何生成新的哈希值,以防用户自上次登录以来更改了密码。在离线登录时:- 对本地数据库进行身份验证。当然,这需要用户至少使用在线版本登录一次,然后才能在本地登录。例如,当有人尝试在断开连接时登录其Microsoft帐户时,Windows 8就是这样做的。
我不知道如何存储或使用客户端状态数据(iOS中的钥匙串也适用于Android),但从Web应用程序的角度来看,您无需做任何事情。您无需做任何事情,因为如果您可以这样做,那么它就不安全。登录后,服务器将设置仅限HTTP cookie,其有效期为几天或几周。在此期间,带有凭据的请求始终由浏览器进行身份验证。您可以从服务器请求登录电子邮件或其他内容。出于额外的安全目的,服务器可能会请求XSRF token。在这种情况下,请将其保存在localStorage中。丢失此令牌并没有什么影响。这是最安全的方式,也被移动客户端使用,包括通过 WebView 进行的网银。使用浏览器进行身份验证是最安全和最简单的,因为有很多弱点,如凭据存储、检查正确的 SSL 证书、加密等。通过 Webview,浏览器会处理所有事情。如果您对这些服务器代码感兴趣,我已经解释过了Appengine跨域身份验证服务器代码。