在iOS中,维护登录凭据的最佳方式是什么?

11

我需要在整个应用程序中保持我的登录凭据,因此我有三个选项来维护我的登录凭据...

1 key chain
2 NSUserDefaults
3 plist

哪一个是最好的选择?还有其他存储登录凭据的方法吗?

谢谢提前

2个回答

20

鉴于它提供的安全功能,我建议使用钥匙串来存储登录凭据。

iOS上的钥匙串服务提供了一种安全地存储密码、密钥、证书等内容的方法。

像密码和密钥这样的敏感数据应该存储在钥匙串中。苹果的钥匙串服务编程指南说:

"钥匙串是一个加密容器,可以保存多个应用程序和安全服务的密码。钥匙串是安全存储容器,这意味着当钥匙串被锁定时,没有人可以访问其受保护的内容。"

这里有两篇不错的教程。

  1. 如何在iOS中不存储密码
  2. 使用钥匙串存储用户名和密码
  3. 如何保护用户数据

谢谢您的快速回复...但我有一个疑问?...在存储到钥匙串时是安全的,但在卸载状态下,钥匙串中包含的密码不会被删除,那么我该如何维护它? - Arun
即使应用程序已被删除并且密码保存在钥匙串中,它仍然是安全的。当应用程序被删除时,无法从钥匙串中删除它。如果有任何情况,密码只会持续存在,直到您再次安装应用程序。没有人可以访问或查看它。 - Jack Humphries
@Spynet:这可能是一个问题,但你可以通过向你的NSUserDefault添加一个标记来克服它。当应用程序运行时首先检查bool值。bool值表示密码是否保存在keychain中。 - Midhun MP
@MidhunMP 当钥匙串同步时怎么办?或者当用户更改他的iCloud账户时呢?那么钥匙串会发生变化。 - onmyway133

0

这个链接旨在使使用Mac OSX和iOS钥匙串像NSUserDefaults一样容易。

它是Mac OSX和iOS钥匙串的KVO兼容Cocoa包装器,该包装器的模型是NSUserDefaults,因此意图是对于通常需要调用的常见情况:

[NSUserDefaultsController sharedUserDefaultsController]

你应该能够调用

[PDKeychainBindingsController sharedKeychainBindingsController]

对于通常需要调用的常见情况:

[NSUserDefaults standardUserDefaults]

你应该能够调用

[PDKeychainBindings sharedKeychainBindings]

这些实现之间有一些差异。首先,这个类只对字符串有效,因为这是Keychain接受的,所以那些接受非字符串对象(如数组、字典等)的方法已从该类中省略。其次,目前只实现了“立即模式”,因此您不能设置一堆值,然后调用“保存”来执行一次写入,也没有“恢复到保存的值”的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接