用户登录服务时应在哪个位置存储令牌?我不是保存密码(显然是在使用钥匙串的地方),而是令牌。很多地方说只使用NSUserDefaults,但是StackOverflow上的某些人似乎真的很热衷于钥匙串。
NSUserDefaults可以吗?
用户登录服务时应在哪个位置存储令牌?我不是保存密码(显然是在使用钥匙串的地方),而是令牌。很多地方说只使用NSUserDefaults,但是StackOverflow上的某些人似乎真的很热衷于钥匙串。
NSUserDefaults可以吗?
Answers:
我强烈建议您使用钥匙串-这正是Facebook用于存储其会话令牌的方式。
NSUserDefaults
不安全或不加密-在设备上以及与Mac同步时都可以轻松打开和阅读。因此,尽管用户默认值是诸如首选项和配置信息之类的好地方,但对于诸如密码之类的敏感内容却不是一个好地方。
会话令牌几乎应始终与密码相同,因此您应将其安全地存储在钥匙串中,并在其中进行加密。Apple有一些示例代码(GenericKeychain)显示了基本实现,您可以通过搜索StackOverflow找到其他示例。希望对您有所帮助。
可以毫无问题地使用NSUserDefaults(用于令牌!)。请检查文档https://developer.apple.com/documentation/security/keychain_services
钥匙串服务被发明为用户明确关心的“秘密”,即密码,私钥或什至是安全便笺(即清晰的凭证)。但是访问令牌是用户输入密码后生成的临时哈希,并且时间有限。即使被盗,恶意分子也无法完全窃取该帐户-所有者可以在另一台设备上登录,并且先前的访问令牌将被重置。因此,正式地,没有禁止将访问令牌存储在UserDefaults中。
仅当设备本身被盗时,才能从UserDefaults中窃取数据,但是我认为内容的安全级别远低于物理设备本身。我认为用户在这种情况下不必担心令牌,而可以担心设备。
但是,将其存储在钥匙串中是一个好习惯,但这只是对安全性的过度使用(!),通常由Internet上的随机用户推荐,而Apple并不需要。苹果公司没有任何文档,他们说令牌必须存储在钥匙串中(如果可以找到,请在下面注释一个)。
因此,答案是-您可以同时使用。但是,如果您的应用程序使用的内容与被盗的iPhone相比花费很多,那么最好使用Keychain,但这只是一个建议。
所有敏感数据都应存储在钥匙串中。
UserDefaults
用于诸如用户首选项之类的小数据。
NSUserDefaults
来存储的数据即使在非越狱设备上也易于读取。如果您担心安全性,那么我会将数据存储在钥匙串中。您打算将身份验证令牌保留多长时间?