在iOS上存储身份验证令牌

时间:2012-10-03 15:55:55

标签: iphone ios xcode security authentication

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

安全地做到这一点最好的方法是什么?

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

3 个答案:

答案 0 :(得分:17)

2个选项

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

NSUserdefaults对于存储用于认证目的的可信值是不安全的。另一方面,Keychain是为了安全可靠而做的。

答案 1 :(得分:9)

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

看看Keychain Service for iOS。这是存储密码,令牌和其他密钥等内容的最佳位置。

答案 2 :(得分:7)

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

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