【问题标题】:Store user credentials to avoid re-typing存储用户凭据以避免重新输入
【发布时间】:2018-01-30 14:37:09
【问题描述】:

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

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

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

回顾:

  1. 使用 localStorage 存储凭据并不安全。如果手机被盗,很容易嗅探凭据
  2. 使用 iOS 钥匙串存储凭据似乎更好,但并非牢不可破。 Android 上有替代方案吗?
  3. 将刷新令牌到期时间设置为一个月而不是几分钟,这可能是一种替代方法,以便用户在一个月内不会注销。我相信您不需要将刷新令牌存储在任何地方,而是留在应用程序内存中。这似乎是一个不错的方法,但如果任何人都可以嗅探 RefreshToken,那么他们就可以永远访问 BE 请求。
  4. 加密服务器上的凭据并将其发送回客户端以安全地存储在设备上。同样,我没有看到太多好处,因为这意味着 BE 接受带有清晰凭据或加密凭据的登录,但如果您窃取加密的凭据,您仍然可以使用它们。

结果: 我很困惑,我不明白什么是最好的方法。谷歌/Facebook/Twitter/等如何。解决这个问题?

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    有很少的选项可以实现这一点,但是是的,这是可能的。

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

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

    • 奖金!加密您的应用本身 - 要增加额外的安全层,请使用cordova-plugin-crypt-file 自行加密您的源文件,防止任何人查看您的代码并了解发生了什么。

    【讨论】:

    • 第一个不是一个选项,因为我想“保存”凭据,这样用户就不需要在每次应用启动时都输入密码。
    • 是的,同意。只是认为提及这是否可以提供一点帮助不会有什么坏处。 :)
    • 我没有得到最后一个。加密密钥存储在哪里?
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多