我正在尝试通过FaceID从钥匙串/安全区域中解锁数据,并使其在用户会话期间可以访问(无其他解锁)。
Per the documentation for kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly:
第一次解锁后,数据将保持可访问状态,直到下一次重新启动为止。建议将其用于需要后台应用程序访问的项目。具有此属性的项目不会迁移到新设备。
但是,每当我调用 SecItemCopyMatching()(documentation)时,都会提示我 始终 进行FaceID授权
有人可以解释我可能做错了(或误解)的事情吗?
答案 0 :(得分:1)
分配给钥匙串项目的数据保护类和访问控制标志是分开的。
在您的问题中,您已经详细介绍了已分配的数据保护类,但是所描述的行为是由指定的访问控制标志引起的。
数据保护类是指设备的锁定状态 ,而不是钥匙串项。
如果您指定一个或多个of these values,则每次访问钥匙串项目时都需要指定的身份验证(生物识别和/或密码)。
如果只希望用户在首次访问该项目时对他们的存在进行身份验证,则可以不为该项目指定访问控制,而直接使用本地身份验证框架。一旦用户成功通过身份验证,就设置一个标志,并且不要在该会话中再次提示它们(或者直到没有经过特定时间或您喜欢的任何逻辑)。