2013-05-28 261 views
48

当用户登录服务时,应该存储令牌的位置是哪个?我没有保存密码(显然我使用钥匙串的地方),但只是令牌。很多地方都说使用NSUserDefaults,但StackOverflow上的一些人似乎对Keychain非常热衷。在iOS上存储身份验证令牌 - NSUserDefaults与钥匙串?

是NSUserDefaults罚款?

+3

即使在非越狱设备上,使用NSUserDefaults存储的数据也很容易读取。如果安全性是您的担忧,那么我会将数据存储在钥匙串中。您计划持续授权令牌多久? –

+0

你可以从[这里]获得swift3实现的基本概念(https://gist.github.com/anishparajuli555/dedfdd4aea836de49ac52d13a45a8f84) –

回答

72

我强烈建议你使用钥匙串 - 这正是Facebook为存储会话令牌所做的。

NSUserDefaults不安全或加密 - 无论是在设备上还是在同步到Mac时,都可以轻松打开和读取。因此,虽然用户默认是喜好和配置信息的好地方,但它不适合任何敏感的地方,如密码。

会话令牌应该几乎总是与密码一样对待,因此您应该将它们安全地存储在钥匙串中,并在那里进行加密。 Apple有一些示例代码(GenericKeychain),它显示了一个基本的实现,您可以通过搜索StackOverflow找到其他示例。希望这能帮助你。

+2

这是一个很好的答案。也在NSUserDefault的文档中。它表示,该课程是为了偏好,而不是用于存储安全的登录信息。 – Tony

+0

这里是另一个SO线程,带有一个很棒的库,用于简化KeyChain访问:http://stackoverflow.com/a/13641196/380837 – Jaroslav

20

这是值得看看使用Lockbox。它真的简化了与钥匙链的接口。

+6

[UICKeyChainStore](https://github.com/kishikawakatsumi/UICKeyChainStore)也值得一提。 – lukestringer90

+1

同意@Mike,Lockbox大大简化了我的问题。 –

相关问题