23

我正在构建一个 iOS 应用程序,并且用户使用我的 Web 服务进行身份验证。我不希望他们每次启动应用程序时都登录(令牌持续一个月)。所以我想把它缓存在设备上的某个地方。

安全地执行此操作的最佳方法是什么?

我可以仅仅依靠应用程序保持暂停状态并将令牌保存在“内存”中吗?

4

3 回答 3

22

2 个选项

  • 利用NSUserdefault(存储为访问令牌或文本字段输入[记住我选项])
  • 完成这项工作的钥匙串访问(推荐)。

NSUserdefaults 对于存储此类用于身份验证的可信值是不安全的。另一方面,钥匙串是为了做到这一点,安全可靠的。

于 2012-10-03T19:20:39.287 回答
13

您不能相信 iOS 会将您的应用程序永远保存在内存中。因此,您必须在某个时候将令牌保存到持久存储中。

查看适用于 iOS 的钥匙串服务。这是存储密码、令牌和其他密钥等内容的最佳位置。

于 2012-10-03T15:59:26.743 回答
10

你不能“安全”地做到这一点。令牌是公共知识,一旦它在您的设备上,无论您尝试采取什么措施来保护它,黑客都可以访问它。把它放在钥匙串里不会改变这个事实。即使您将它存储在那里,这样可以确保它在其中时安全,他们也可以简单地等到它过期,然后在下次通过电线进入时阻止下一个。您的访问令牌不是您需要担心的安全问题,因为实际上您无法在移动环境中这样做。

这意味着您可以将其存储在您想要的任何地方。NSUserDefaults 很好,钥匙串很好,数据库很好,文档目录中的文本文件很好。所有这些都同样安全,因为坚定的黑客可以简单地等待合适的机会来访问他们想要的数据。相反,您应该担心保护用户的身份验证凭据。确保将它们存储在钥匙串中,并且只通过 HTTPS 与您的 API 与具有有效 SSL 证书的服务器通信。

于 2014-01-17T21:39:23.900 回答