2013-05-28 260 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大大簡化了我的問題。 –

相關問題