首页 > 解决方案 > 通过 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 没有 FaceID 的 SecItemCopyMatching

问题描述

我正在尝试通过 FaceID 从钥匙串/安全飞地解锁数据,并使其在用户会话期间可访问(无需额外解锁)。

根据 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 的文档

第一次解锁后,数据仍然可以访问,直到下一次重新启动。对于需要由后台应用程序访问的项目,建议使用此选项。具有此属性的项目不会迁移到新设备。

然而,每当我调用SecItemCopyMatching() (文档) 时,总是会提示我执行 FaceID 授权。

有人可以解释我可能做错了什么(或误解)吗?

标签: iosface-id

解决方案


分配给钥匙串项的数据保护等级和访问控制标志是分开的。

在您的问题中,您已经详细说明了您分配的数据保护类别,但您描述的行为是由指定的访问控制标志引起的。

数据保护等级是指设备的锁定状态,而不是钥匙串项

如果您指定这些值中的一个或多个,则每次访问钥匙串项时都需要指定的身份验证(生物特征和/或密码)。

如果您只希望用户在第一次访问项目时验证他们的存在,那么您可以为项目指定不访问控制并直接使用本地身份验证框架。一旦用户成功通过身份验证,就设置一个标志,并且不要在该会话中再次提示他们(或者直到某个时间还没有过去或任何你喜欢的逻辑)。


推荐阅读