Cordova 存储用户凭据以避免重新键入

Cordova 存储用户凭据以避免重新键入,cordova,authentication,encryption,oauth-2.0,local-storage,Cordova,Authentication,Encryption,Oauth 2.0,Local Storage,我正在开发一个web应用程序(Angular2),它使用OAuth2与后端进行身份验证。凭据(即用户名/密码)以明文形式通过HTTPS发送到后端。后端使用令牌和刷新令牌进行响应。 一切似乎都很正常,除了作为一个单页应用程序,令牌到期时间为30分钟,用户在一段时间不活动后会自动注销,他们需要再次键入凭据 唯一的例外是在web浏览器中,您可以在其中存储它们(Chrome/Firefox),这样您就不需要再次键入它们 在手机上(通过cordova),输入一个困难的密码可能并不理想,所以我正在探索不同的

我正在开发一个web应用程序(Angular2),它使用OAuth2与后端进行身份验证。凭据(即用户名/密码)以明文形式通过HTTPS发送到后端。后端使用令牌和刷新令牌进行响应。 一切似乎都很正常,除了作为一个单页应用程序,令牌到期时间为30分钟,用户在一段时间不活动后会自动注销,他们需要再次键入凭据

唯一的例外是在web浏览器中,您可以在其中存储它们(Chrome/Firefox),这样您就不需要再次键入它们

在手机上(通过cordova),输入一个困难的密码可能并不理想,所以我正在探索不同的方法,主要关注其他问题

概述:

  • 使用localStorage存储凭据是不安全的。如果手机被偷了,很容易嗅出凭据
  • 使用iOS密钥链存储凭据似乎更好,但并非牢不可破。安卓上有其他选择吗
  • 将刷新令牌到期时间设置为一个月而不是几分钟可能是另一种选择,这样用户在一个月内不会注销。我相信你不需要将刷新令牌存储在任何地方,只需要将其留在应用程序内存中。这似乎是一个很好的方法,但如果任何人都可以嗅出RefreshToken,那么他们就可以永远访问BE请求
  • 加密服务器上的凭据并将其发送回客户端,以便安全地存储在设备上。同样,我没有看到太多的好处,因为这意味着BE接受具有清晰凭据或加密凭据的登录,但如果您窃取了加密凭据,您仍然可以使用它们
  • 结果: 我很困惑,我不明白什么是最好的方法。Google/Facebook/Twitter等如何解决这个问题


    提前感谢您的帮助。

    实现这一点的方法非常少,但是是的,这是可能的

    • 使用SessionStorage-使用SessionStorage而不是localStorage。存储在sessionStorage中的键/值将在下一次应用程序启动时清除。这可能无助于完全保护您的应用程序,但肯定可以将风险降至最低

    • 在本地加密它们-用于使用随机256位AES密钥加密用户输入。这个插件将处理加密和解密

    • 奖金!加密你的应用程序本身-要添加额外的安全层,请使用加密你的源文件本身,并防止任何人查看你的代码和了解发生了什么


    第一个选项不是选项,因为我想“保存”凭据,这样用户就不必在每次应用启动时键入密码。是的,我同意。我只是想,如果这能提供一点帮助的话,提到这一点也不会有什么坏处。:)我没有得到最后一个。加密密钥存储在哪里?