【发布时间】:2018-01-30 14:37:09
【问题描述】:
我正在开发一个使用 OAuth2 通过后端进行身份验证的 Web 应用程序 (Angular2)。凭据(即用户名/密码)通过 HTTPS 以纯文本形式发送到后端。后端回复 Token 和 RefreshToken。 一切似乎都正常,除了作为令牌到期时间为 30 分钟的单页应用程序,用户在一段时间不活动后会自动注销,他们需要再次输入凭据。
唯一的例外是在您可以存储它们的网络浏览器(Chrome/Firefox)中,因此您无需再次键入它们。
在移动设备上(通过cordova),输入一个困难的密码可能并不理想,所以我正在探索不同的方法,主要是查看关于 SO 的其他问题。
回顾:
- 使用 localStorage 存储凭据并不安全。如果手机被盗,很容易嗅探凭据
- 使用 iOS 钥匙串存储凭据似乎更好,但并非牢不可破。 Android 上有替代方案吗?
- 将刷新令牌到期时间设置为一个月而不是几分钟,这可能是一种替代方法,以便用户在一个月内不会注销。我相信您不需要将刷新令牌存储在任何地方,而是留在应用程序内存中。这似乎是一个不错的方法,但如果任何人都可以嗅探 RefreshToken,那么他们就可以永远访问 BE 请求。
- 加密服务器上的凭据并将其发送回客户端以安全地存储在设备上。同样,我没有看到太多好处,因为这意味着 BE 接受带有清晰凭据或加密凭据的登录,但如果您窃取加密的凭据,您仍然可以使用它们。
结果: 我很困惑,我不明白什么是最好的方法。谷歌/Facebook/Twitter/等如何。解决这个问题?
提前感谢您的帮助。
【问题讨论】:
标签: cordova authentication encryption oauth-2.0 local-storage