在iOS上存储身份验证令牌

Con*_*oob 17 security iphone authentication xcode ios

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

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

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

Lit*_*T.V 19

2个选项

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

NSUserdefaults对于存储用于认证目的的可靠值是不安全的.另一方面,Keychain是这样做的,安全可靠.


Vic*_*nin 10

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

查看iOS的Keychain服务.这是存储密码,令牌和其他密钥等内容的最佳位置.

  • 不需要.您不必在Keychain中存储任何东西.这取决于你在哪里存储任何秘密.但是,假设您将凭据存储在远程数据库中.现在问题是您的应用程序如何向远程数据库进行身份验证?如果它将存储硬编码的用户名/密码,那么任何人都可以反编译您的应用程序,从中获取远程数据库的用户名/密码并使用它来获取真实的凭据.因此,最后您将需要在您的设备上存储一些东西,而Keychain Service是常见且合理安全的方式. (3认同)

Jos*_*osh 8

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

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

  • 虽然我同意受损设备或连接会使大多数事情变得不安全,但安全性主要是通过使攻击者获取信息或破坏某些内容非常困难.考虑到这一点,将更敏感的信息保存在安全的环境(例如iOS Keychain)中是有意义的.当然,一个坚定的黑客可能会打败它,但一个不那么坚定的黑客将不会,这是一个胜利. (13认同)
  • 默默无闻就没有安全感! (3认同)