6.4 在設(shè)備上安全地存儲認證信息

Keychain : 在設(shè)備上安全存儲少量數(shù)據(jù)的機制, 比如密碼、密鑰、證書和身份信息等

Keychain 并不適合于通用目的的加密和數(shù)據(jù)存儲, 而是用來存儲需要保護的信息, 比如密碼與私鑰就會以加密的形式存儲起來. 諸如證書(不需要這種級別的保護)等就不會加密存儲

iOS 中, 每個應(yīng)用都可以訪問它所創(chuàng)建的 Keychain 條目而無須請求許可
傳統(tǒng)的 Mac 開發(fā), 可以訪問用戶同意的任何 Keychain 條目

從技術(shù)上來說, Keychain 數(shù)據(jù)存儲在應(yīng)用沙箱之外, 這樣就可以通過應(yīng)用委托事件來持久化數(shù)據(jù)了. iOS Keychain 的權(quán)限依賴于用于簽名應(yīng)用的配置文件. 當(dāng)應(yīng)用在其版本的生命周期中不斷演進時, 你需要一直使用相同的配置文件

應(yīng)用的 Keychain 可以包含任意數(shù)量的條目, 每個條目都包含待存儲的數(shù)據(jù)及屬性. 每個 Keychain 條目的屬性都依賴于在存儲過程中選擇的條目類. 條目類之間存在很多通用的條目屬性.

表 6-3 可編輯的 Keychain 條目屬性

在創(chuàng)建過程中, 有兩個重要的屬性需要注意(對于所有類都是一樣的), 它們是 kSecAttrAccessible 與 kSecAttrAccessGroup. 可以通過 kSecAttrAccessible 判斷應(yīng)用何時能夠訪問 Keychain 條目. 你應(yīng)用使用讓應(yīng)用能夠滿足其目的的最嚴格的選項. 表 6-4 列出了 kSecAttrAccessible 屬性的所有可能值. 最低限度上, 你應(yīng)用考慮將 kSecAttrAccessible 設(shè)為以 ThisDeviceOnly 結(jié)尾的值, 這樣就限制 Keychain 條目不能傳給新的設(shè)備. kSecAttrAccessGroup 表示 Keychain 條目屬于哪個訪問組. 應(yīng)用可以屬于多個訪問組, 你在第 11 章定義的 Entitlements.plist 文件中將會看到這一點. 多個訪問組可以進一步劃分 Keychain 數(shù)據(jù). 訪問組還可以用于在應(yīng)用間共享數(shù)據(jù). 第 11 章的示例將會詳細介紹這一點, 包括 Entitlements.plist 文件

表 6-4 kSecAttrAccessible 屬性的可能值

Generic Password 類是安全存儲非 Internet 密碼的理想位置, 比如本章的服務(wù)層使用的認證令牌等. Generic Password 類也可以用于存儲檢測應(yīng)用之前是否安裝過的指示器

在 Keychain 中創(chuàng)建條目時, 最佳實踐是首先判斷條目是否已經(jīng)存在, 然后根據(jù)結(jié)果進行添加或更新. 其余動作(檢索、更新與刪除)都接收一個查詢參數(shù), 它是 CFDictionaryRef 的一個實例. 動作會在與查詢匹配的每個 Keychain 條目上執(zhí)行. 查詢參數(shù)可以是任意數(shù)量的條目屬性(表 6-3 中介紹的屬性的一個子集)與表 6-5 中定義的搜索屬性的組合


表 6-5 預(yù)定義的 Keychain 搜索屬性

第 11 章介紹如何將 Keychain 集成到應(yīng)用中, 包括如何在多個應(yīng)用間共享數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容