在iOS上存储身份validation令牌

我正在构build一个iOS应用程序,用户使用我的Web服务进行身份validation。 我不希望他们每次启动应用程序(令牌持续一个月)login。 所以我想把这个caching在设备的某个地方。

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

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

2个选项

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

NSUserdefaults是不安全的存储这样的可信的价值是为了validation的目的。另一方面钥匙链是做到这一点,安全和可靠。

你不能依靠iOS将你的应用程序永远留在内存中。 所以,您必须在某个时刻将令牌保存到持久性存储中。

查看iOS的钥匙串服务 。 这是存储密码,令牌和其他键的最好的地方。

你不能“安全地”这样做。 令牌是公共知识,只要黑客能够访问它,无论您如何设法保护它。 把它放在钥匙链里不会改变这个事实。 即使你将它存储在那里,这将使它在那里的安全,他们可以简单地等待,直到它到期,然后阻止下一次,当下一次通过电线。 您的访问令牌不是您需要担心的安全问题,因为事实上,您无法在移动环境中执行此操作。

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