2016-07-24 30 views
5

事情並不清楚,因爲他們可能會在用戶手機上存儲登錄數據的最佳做法。有些人建議數據如userID = 123loggedIn = true類型的數據應該存儲在NSUSerDefaults數據中。根據我的理解,根據這篇文章,這個數據可以很容易地操縱,根據這篇文章,https://www.andyibanez.com/nsuserdefaults-not-for-sensitive-data/iOS Swift用戶登錄數據或OAuth令牌的存儲位置?

所以問題是:當用戶瀏覽各種屏幕時,堅持登錄數據的最佳方式是什麼?唯一需要存儲的數據是userIDOAuth Token以及有關此用戶帳戶狀態的其他一些自定義位。什麼是存儲這些數據的最安全的方式,以確保在數據從服務器上被拉出時,某人不能簡單地僞裝成另一個用戶?

問候, 邁克爾

+1

我認爲NSUserDefaults應該沒問題。根據我的理解,有人需要身體上有你的手機才能訪問這些信息,如果他們有你的手機,那麼在這一點上它是一種毫無爭議的點呢? –

+0

因此,如果以未加密的方式存儲用戶ID,那麼如果以非加密方式存儲此數據,如何阻止某人嘗試使用用戶ID 0001,0002,0003等來猜測此信息,以嘗試訪問某人帳戶。很顯然,用戶標識比迭代數字複雜得多,儘管在技術上最終可能會猜出一個。那麼最好是說只存儲一個很長的userID而沒有別的,然後從服務器查詢其他所有內容,以避免應用程序依賴NSUserDefaults中的數據? –

回答

4

NSUserDefaults的API是一個糟糕的地方來存儲REST令牌和任何類型的祕密數據。
因爲它不是一個安全的方法,所以沒有加密。此外,它可以通過逆向工程輕鬆打開和閱讀。

我建議你將它存儲在鑰匙串中。鑰匙鏈是更好的解決方案,因爲它更安全並具有加密功能。請參閱iOS Keychain Services Task參考資料,以獲取有關實施鑰匙串支持存儲的更多詳細信息。

另外請注意,這是一個非常耗時的任務,你可能會對第三方庫,鑰匙串包裝器感興趣。我會推薦你​​SSKeychain庫或GenericKeychain蘋果示例項目作爲一個起點。