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

时间:2017-08-22 10:40:19

标签: cordova authentication encryption oauth-2.0 local-storage

我正在开发一个使用OAuth2通过BackEnd进行身份验证的Web应用程序(Angular2)。凭证(即用户名/密码)通过HTTPS以纯文本形式发送到后端。后端用Token和RefreshToken回复。 一切似乎都运行良好,除了是一个令牌到期时间为30分钟的单页应用程序,用户在一段时间不活动后会自动注销,他们需要再次输入凭据。

唯一的例外是在网络浏览器中您可以存储它们(Chrome / Firefox),因此您无需再次输入它们。

在移动设备上(通过cordova),输入一个困难的密码可能并不理想,所以我正在探索不同的方法,主要是关于SO的其他问题。

回顾:

  1. 使用localStorage存储凭据并不安全。如果手机被盗,它很容易嗅到凭证
  2. 使用iOS钥匙串存储凭据似乎更好但不牢不可破。 Android上有替代品吗?
  3. 将刷新令牌到期时间设置为一个月而不是几分钟,可能是一种替代方案,因此用户未注册一个月。我相信您不需要在任何地方存储刷新令牌,而是留在应用程序内存中。这似乎是一个很好的方法,但如果有人可以嗅探RefreshToken,那么他们就可以永久访问BE请求。
  4. 加密服务器上的凭据并将其发送回客户端以安全地存储在设备上。再次,我没有看到太多的好处,因为这意味着BE接受具有明确凭据或加密凭证的登录,但是如果您窃取加密的登录,您仍然可以使用它们。
  5. 结果: 我很困惑,我不明白什么是最好的方法。如何谷歌/ Facebook / Twitter /等。解决这个问题?

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

实现这一目标的选择很少,但是,有可能。

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

  • 在本地加密 - 使用cordova-plugin-secure-storage使用随机256位AES密钥加密用户输入。该插件将处理加密和解密

  • <强>奖金!加密您的应用程序 - 要添加额外的安全层,请使用cordova-plugin-crypt-file自行加密源文件,并阻止任何人查看您的代码并弄清楚发生了什么。