2012-10-03 341 views
11

我正在構建iOS應用程序,並且用戶使用我的Web服務進行身份驗證。我不希望他們每次啓動應用程序時都會登錄(令牌持續一個月)。所以我想將它緩存在設備的某個地方。在iOS上存儲身份驗證令牌

安全地做到這一點的最佳方式是什麼?

我可以只依靠應用程序保持掛起狀態並將標記保存在「內存」中嗎?

+0

您可能也想看看OWASP指南 - https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet – rajagp

回答

15

2個選項

  • 利用NSUserdefault(店作爲訪問令牌或文本框輸入[記住我的選項])
  • 鑰匙扣做工作訪問(推薦)。

NSUserdefaults對於存儲用於驗證目的的可信值是不安全的。另一方面,鑰匙鏈是爲了做到這一點,安全和可靠的。

7

你不能依靠那個iOS將你的應用永遠留在內存中。因此,您必須在某個時刻將令牌保存到持久存儲中。

看看Keychain Service for iOS。這是存儲密碼,令牌和其他密鑰的最佳位置。

+0

但是,如果憑證位於遠程數據庫中,並且他不想存儲這些憑據本地?是否需要使用鑰匙串來保存令牌或類似的東西? –

+1

不需要。您不必在鑰匙鏈中存儲任何東西。這取決於你在哪裏存儲任何祕密。但是,假設您將憑證存儲在遠程數據庫中。現在的問題是您的應用程序如何驗證遠程數據庫?如果它將存儲硬編碼的用戶名/密碼,那麼任何人都可以反編譯你的應用程序,從它獲取遠程數據庫的用戶名/密碼,並使用它來獲得真正的憑據。所以,最後你需要在你的設備上存儲一些東西,並且Keychain服務是一種常見且合理的安全方式。 –

5

你不能「安全」。令牌是公共知識,只要您的設備上的黑客可以訪問它,無論您嘗試如何保護它。把它放在鑰匙鏈裏不會改變這個事實。即使你將它存儲在那裏,它會在它存在的時候保證它的安全,但它們可以等到它到期,然後在下一次通過線路時阻塞下一個。您的訪問令牌不是您需要擔心的安全問題,因爲事實上,您無法在移動環境中執行此操作。

這意味着你可以將它存儲在任何你想要的地方。 NSUserDefaults很好,鑰匙鏈很好,數據庫很好,文檔目錄中的文本文件很好。他們都是同樣安全的,因爲一個堅定的黑客可以簡單地等待合適的機會來訪問他們想要的數據。您應該擔心保護用戶的身份驗證憑據。請確保您將這些存儲在鑰匙串中,並且只能通過HTTPS與您的API通過具有有效SSL證書的服務器進行通信。

+6

雖然我同意受損的設備或連接會使大多數事情變得不安全,但安全主要是通過使攻擊者非常難以獲取信息或破壞某些東西。考慮到這一點,將更敏感的信息保存在安全的環境中(例如iOS Keychain)非常有意義。當然,一個堅定的黑客可能會擊敗它,但一個不太確定的黑客不會這樣做,這是一場勝利。 – lm2s

相關問題