"keep logged in" 如何在本机应用程序中得到保护?
How is "keep logged in" secured in native applications?
我一直想知道 Dropbox 客户端等本机应用程序或任何其他具有服务器端服务的本机应用程序如何安全地实现“保持登录”功能。
- 他们存储用户凭据吗?或者商店是永不过期的访问令牌?
- 凭据/访问令牌是如何存储的?它们必须以任何方式加密。
- 加密数据时,密钥是如何生成的?修复密钥没有多大意义,因为代码可以被逆向工程。
是否有安全存储凭据/访问令牌的最佳实践或行业标准?
本机应用程序可以在登录后使用内置的安全存储来存储 OAuth 令牌:
- 令牌使用应用程序和用户私有的密钥加密
- 它们存储在操作系统安全存储中,例如 Windows Credential Manager / MacOS 或 iOS Key Chain
- 刷新令牌可以有很长的有效期,但不是无限的
- 标准库通常做较低级别的加密工作
当然,主要的好处是用户不需要在每次重新启动应用程序时都登录。例如:
- 我的一个桌面应用程序通过 this code 处理 OS 安全存储。
- 并且 the end of this blog post 显示存储的凭据。
相同的原则适用于移动设备:
我一直想知道 Dropbox 客户端等本机应用程序或任何其他具有服务器端服务的本机应用程序如何安全地实现“保持登录”功能。
- 他们存储用户凭据吗?或者商店是永不过期的访问令牌?
- 凭据/访问令牌是如何存储的?它们必须以任何方式加密。
- 加密数据时,密钥是如何生成的?修复密钥没有多大意义,因为代码可以被逆向工程。
是否有安全存储凭据/访问令牌的最佳实践或行业标准?
本机应用程序可以在登录后使用内置的安全存储来存储 OAuth 令牌:
- 令牌使用应用程序和用户私有的密钥加密
- 它们存储在操作系统安全存储中,例如 Windows Credential Manager / MacOS 或 iOS Key Chain
- 刷新令牌可以有很长的有效期,但不是无限的
- 标准库通常做较低级别的加密工作
当然,主要的好处是用户不需要在每次重新启动应用程序时都登录。例如:
- 我的一个桌面应用程序通过 this code 处理 OS 安全存储。
- 并且 the end of this blog post 显示存储的凭据。
相同的原则适用于移动设备: