LESSON 39 / 577 分钟

访问策略、共享钥匙串与 Face ID

保存同一个秘密,解锁后读取、后台读取、跨应用共享和跨设备同步,是四种不同的设计决策。

用你的前端经验理解

可以用“何时允许读、谁能读、复制到哪里”理解 Keychain 属性。Face ID / Touch ID 是本机用户验证,不等于 OAuth 登录。

为什么需要它

敏感数据不只有“存或不存”的选择,还要决定何时允许访问以及是否允许迁移。仅前台解锁后需要的凭证与后台任务要读取的凭证,访问策略可能不同。先描述真实业务时机,再选择满足需求的最严格策略;不要为了减少一次读取失败就放宽所有条目。

它是怎样工作的

设备解锁条件、ThisDeviceOnly 迁移属性与额外用户在场校验是不同维度。Face ID 或 Touch ID 校验确认的是当前设备上的访问条件,不会自动向你的后端证明业务账号身份。共享 Keychain 还需要匹配的 access group 与签名授权;App Group 文件共享不能代替 Keychain access group。

把关键概念连起来

1

何时能读

kSecAttrAccessible 控制锁定状态下的可用性,例如 WhenUnlocked 与 AfterFirstUnlock。带 ThisDeviceOnly 的策略不迁移到另一设备,不能与可同步条目组合;按实际场景选择最小需要。

2

谁能共享

Keychain access group 允许具有匹配签名权限的应用访问指定条目;App Groups 常用于共享文件/偏好。kSecAttrSynchronizable 则涉及 iCloud Keychain 同步,三者职责不同。

3

本机认证

LocalAuthentication 用于 Face ID / Touch ID 等本机验证;保护特定秘密时可结合 Keychain access control。Passkeys 则是与服务域绑定的公钥登录凭证,服务端仍要验证挑战。

锁定的私人日记

打开日记时进行本机验证,读取受访问控制保护的密钥;失败或取消保持锁定。若需要登录服务端,仍使用独立业务会话。小组件只展示非敏感摘要。

保护需要再次确认才能使用的敏感条目

  1. 先决定敏感动作是否必须由用户主动触发,避免后台流程等待一个没有界面承接的认证窗口。
  2. 创建条目时设置明确访问控制,读取时处理用户取消、生物识别不可用以及策略不满足等结果。
  3. 如果选择绑定当前生物识别集合的策略,要设计系统录入变化后的恢复路径,不能假定凭证永远可读。

这里需要你亲自判断

不要以“弹过 Face ID”代替服务器身份验证;也不要把设备会话令牌默认设为跨设备同步。用户取消和认证不可用都是正常路径。

做一个小练习

分别为前台解锁日记、后台上传和主 App/扩展共享凭证设计访问策略,解释是否需要同步。

  1. 比较前台解锁凭证与后台刷新凭证的访问需求,并说明为何不能使用同一默认策略。
  2. 用户取消本机认证时,保证敏感动作不执行且账号不会被误删。
展开参考思路与验收标准

本机解锁、凭证存储和业务授权是三层。系统允许读取某条秘密,不等于服务器仍认可它;更严格的策略需要可解释的恢复方案。

Face ID 成功后,服务器是否可以直接相信客户端传来的 user_id?

继续查阅官方资料
Apple Developer 官方资料Keychain 条目访问条件

本课聚焦核心认知。具体 API、系统要求与发布政策,以当前官方文档和工程验证为准。

答对理解题后即可标记完成