簡體   English   中英

在 iOS 上存儲身份驗證令牌 - NSUserDefaults 與鑰匙串?

[英]Storing authentication tokens on iOS - NSUserDefaults vs Keychain?

當用戶登錄服務時,我應該在哪個位置存儲令牌? 我沒有保存密碼(顯然我會在那里使用鑰匙串),而只是保存令牌。 很多地方都說只使用 NSUserDefaults,但 StackOverflow 上的一些人似乎非常熱衷於 Keychain。

NSUserDefaults 好嗎?

我強烈建議你使用鑰匙串——這正是 Facebook 用來存儲他們的會話令牌的方法。

NSUserDefaults不安全或不加密 - 它可以在設備上和同步到 Mac 時輕松打開和閱讀。 因此,雖然用戶默認值是首選項和配置信息等內容的好地方,但它不是任何敏感內容的好地方,例如密碼。

會話令牌幾乎總是與密碼一樣對待,所以你應該將它們安全地存儲在鑰匙串中,在那里它們將被加密。 Apple 有一些示例代碼 ( GenericKeychain ) 顯示了基本實現,您可以通過搜索 StackOverflow 找到其他示例。 希望對你有所幫助。

NSUserDefaults 可以毫無問題地使用(對於令牌!)。 請檢查文檔https://developer.apple.com/documentation/security/keychain_services

鑰匙串服務被發明為用戶明確關心的“秘密”,即密碼、私鑰或什至安全筆記,即清晰的憑證。 但是訪問令牌是用戶輸入密碼后生成的臨時哈希,時間有限。 即使被盜,犯罪者也不能完全盜取帳戶 - 所有者可以在另一台設備上登錄,並且先前的訪問令牌將被重置。 因此,從形式上講,沒有禁止在 UserDefaults 中存儲訪問令牌。

UserDefaults 的數據只有在設備本身被盜的情況下才能被盜,但我認為內容的安全級別遠低於物理設備本身。 我認為在這種情況下用戶不會擔心令牌,而是擔心設備。

但是,將它存儲在 Keychain 中是一個很好的做法,但這只是對安全性的過度(!)使用,通常由 Internet 上的隨機用戶推薦,Apple 不要求這樣做。 Apple 沒有提供任何文檔,他們說令牌必須存儲在鑰匙串中(如果你能找到一個,請在下面評論一個)。

所以,答案是 - 您可以同時使用兩者。 但是,如果您的應用程序使用的內容與被盜 iPhone 相比成本很高,那么最好使用 Keychain,但這只是一個建議。

所有敏感數據都應存儲在鑰匙串中。 UserDefaults適用於用戶偏好等小塊數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM