我正在构建一个 iOS 应用程序,并且用户使用我的 Web 服务进行身份验证。我不希望他们每次启动应用程序时都登录(令牌持续一个月)。所以我想把它缓存在设备上的某个地方。
安全地执行此操作的最佳方法是什么?
我可以仅仅依靠应用程序保持暂停状态并将令牌保存在“内存”中吗?
我正在构建一个 iOS 应用程序,并且用户使用我的 Web 服务进行身份验证。我不希望他们每次启动应用程序时都登录(令牌持续一个月)。所以我想把它缓存在设备上的某个地方。
安全地执行此操作的最佳方法是什么?
我可以仅仅依靠应用程序保持暂停状态并将令牌保存在“内存”中吗?
2 个选项
NSUserdefaults 对于存储此类用于身份验证的可信值是不安全的。另一方面,钥匙串是为了做到这一点,安全可靠的。
您不能相信 iOS 会将您的应用程序永远保存在内存中。因此,您必须在某个时候将令牌保存到持久存储中。
查看适用于 iOS 的钥匙串服务。这是存储密码、令牌和其他密钥等内容的最佳位置。
你不能“安全”地做到这一点。令牌是公共知识,一旦它在您的设备上,无论您尝试采取什么措施来保护它,黑客都可以访问它。把它放在钥匙串里不会改变这个事实。即使您将它存储在那里,这样可以确保它在其中时安全,他们也可以简单地等到它过期,然后在下次通过电线进入时阻止下一个。您的访问令牌不是您需要担心的安全问题,因为实际上您无法在移动环境中这样做。
这意味着您可以将其存储在您想要的任何地方。NSUserDefaults 很好,钥匙串很好,数据库很好,文档目录中的文本文件很好。所有这些都同样安全,因为坚定的黑客可以简单地等待合适的机会来访问他们想要的数据。相反,您应该担心保护用户的身份验证凭据。确保将它们存储在钥匙串中,并且只通过 HTTPS 与您的 API 与具有有效 SSL 证书的服务器通信。