通过 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 在没有 FaceID 的情况下进行 SecItemCopyMatching

SecItemCopyMatching without FaceID via kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly

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

Per the documentation for kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly:

After the first unlock, the data remains accessible until the next restart. This is recommended for items that need to be accessed by background applications. Items with this attribute do not migrate to a new device.

然而,每当我调用 SecItemCopyMatching() (documentation) 时,我总是 提示进行FaceID授权

谁能解释一下我可能做错了什么(或误解)?

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

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

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

如果您指定一个或多个 of these values,则每次访问钥匙串项目时都需要指定的身份验证(生物识别 and/or 密码)

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