ios - 通过 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 没有 FaceID 的 SecItemCopyMatching
问题描述
我正在尝试通过 FaceID 从钥匙串/安全飞地解锁数据,并使其在用户会话期间可访问(无需额外解锁)。
根据 kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 的文档:
第一次解锁后,数据仍然可以访问,直到下一次重新启动。对于需要由后台应用程序访问的项目,建议使用此选项。具有此属性的项目不会迁移到新设备。
然而,每当我调用SecItemCopyMatching() (文档) 时,总是会提示我执行 FaceID 授权。
有人可以解释我可能做错了什么(或误解)吗?
解决方案
分配给钥匙串项的数据保护等级和访问控制标志是分开的。
在您的问题中,您已经详细说明了您分配的数据保护类别,但您描述的行为是由指定的访问控制标志引起的。
数据保护等级是指设备的锁定状态,而不是钥匙串项。
如果您指定这些值中的一个或多个,则每次访问钥匙串项时都需要指定的身份验证(生物特征和/或密码)。
如果您只希望用户在第一次访问项目时验证他们的存在,那么您可以为项目指定不访问控制并直接使用本地身份验证框架。一旦用户成功通过身份验证,就设置一个标志,并且不要在该会话中再次提示他们(或者直到某个时间还没有过去或任何你喜欢的逻辑)。
推荐阅读
- c# - c# wpf 中的画笔图案(xaml - 矢量)
- amazon-web-services - 检查安装在 AWS EC2 实例上的 Datadog 代理版本
- verilog - 收到错误“不支持的 RAM 模板”?
- c - 有人可以解释这是什么意思吗?
- c# - 使用 asp.net mvc 在图表上显示数据库表的即时更新的建议
- c - 与 strcat() 的访问冲突
- python - Telebot + Celery + pytransitions:对任务的响应
- rust - 打开 API 生成器。rust 和 rust-server 客户端有什么区别?
- php - axios发送POST请求CORS时$_POST为空
- postgresql - 如何使用 sslmode =verify-ca 或 verify-full 在 hyperledger fabric-ca 中将 postgres 添加为数据库?