Iphone 在iOS上存储身份验证令牌

Iphone 在iOS上存储身份验证令牌,iphone,ios,xcode,security,authentication,Iphone,Ios,Xcode,Security,Authentication,我正在构建一个iOS应用程序,用户使用我的web服务进行身份验证。我不希望他们每次启动应用时都登录(代币持续一个月)。所以我想把它缓存在设备的某个地方 安全地执行此操作的最佳方法是什么 我可以依靠应用程序保持挂起状态并将令牌保留在“内存”中吗?你不能指望iOS会将你的应用程序永远保留在内存中。因此,您必须在某个时刻将令牌保存到持久存储中 看。这是存储密码、令牌和其他密钥的最佳场所。2选项 使用(存储为访问令牌或文本字段输入[记住我选项]) 用于执行此作业的钥匙链访问(推荐) NSUserde

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

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


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

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

看。这是存储密码、令牌和其他密钥的最佳场所。

2选项

  • 使用(存储为访问令牌或文本字段输入[记住我选项])
  • 用于执行此作业的钥匙链访问(推荐)
NSUserdefaults对于存储用于身份验证的可信值来说并不安全。另一方面,密钥链则是安全可靠的。您不能“安全地”执行此操作。

令牌是公共知识,一旦它出现在您的设备上,黑客就可以访问它,无论您如何保护它。把它放进钥匙链不会改变这个事实。即使你把它储存在那里,这会使它在里面的时候更安全,他们也可以简单地等到它过期,然后在下一次它通过电线进入时卡住它。您不需要担心访问令牌的安全性,因为事实上,在移动环境中您无法做到这一点


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

但是,如果凭据位于远程数据库中,而他不想将这些凭据存储在本地,该怎么办?是否需要使用Keychain来保存令牌或类似的东西?不,您不必在Keychain中存储任何东西。你想把秘密藏在哪里取决于你。但是,假设您将凭据存储在远程数据库中。现在的问题是,您的应用程序如何对远程数据库进行身份验证?如果它将存储硬编码的用户名/密码,那么任何人都可以反编译你的应用程序,从中获取远程数据库的用户名/密码,并使用它获取真实的凭据。因此,最终你需要在你的设备上存储一些东西,而钥匙链服务是一种常见且相当安全的方式。你可能还想看看OWASP指南——虽然我同意受损的设备或连接会使大多数东西不安全,但安全性主要是通过使其非常,攻击者很难访问信息或破坏某些东西。考虑到这一点,将更敏感的信息保存在安全的环境(如iOS密钥链)中是有意义的。毫无疑问,一个坚定的黑客可能会击败它,但一个不那么坚定的黑客不会,这是一个胜利。虽然我同意,你说的大部分时间都是正确的-你最好把这件事放到钥匙链中,避免自己向别人解释。默默无闻不是安全@Josh黑客如何在HTTPS连接(使用有效的SSL证书)下拦截刷新的令牌?我认为这在浏览器上是可能的,但在iOS上是不可能的。