Face ID从钥匙串中读取和写入值

11
我了解如何使用框架KeychainAccess中的kSecAccessControlTouchIDAny来访问指纹识别,但我无法弄清如何在iOS 11中使用面容ID。我还没有找到任何解决此问题的文档(也许文档还没有发布?)。
因此,我正在寻求帮助并询问stackoverflow:如何将使用面容ID保护的值写入钥匙串,并如何将它们复制回来?
最好提供一个最小示例。

1
苹果已经提供了一个非钥匙串示例,但我想钥匙串应该是一样的;在iPhone X设备上将自动使用FaceID,在其他设备上将使用TouchId。不需要特定的代码。 - Paulw11
@Paulw11 我看过那个例子。我真的很好奇它是否可以直接使用,因为该案例被称为 ...TouchIDAny。这可能只是由操作系统处理的 1<<1 值。 - bemeyer
1
我想应该是这样的。该API是在Face ID出现之前创建的,因此不能用名称引用Face ID。我希望最终会有一个更新,引用“生物识别ID”,但由于Face ID替代了用于ApplePay和设备解锁的TouchID,因此可以合理地假设它将无缝地替换其他应用程序中的TouchID。 - Paulw11
2
从 https://forums.developer.apple.com/thread/86779 上可以看到一位苹果员工的评论:"由于框架漏洞,FaceID 在 Xcode 9 GM 上无法使用。目前最好的做法是在 iPhone 8 上进行测试,并确保 Touch ID 正常工作。" - Daniel
1
@Daniel,感谢您在这里发布了那个对话的链接!希望我们能尽快获得更多信息。 - bemeyer
2个回答

5

1
如果您将密钥NSFaceIDUsageDescription添加到info.plist中,则示例代码可与Face ID正常工作。然后,您将不会收到警告提示“应用程序尚未更新以支持Face ID”。 - Dorian Roy

3

看起来苹果已经将Face ID支持添加到本地身份验证API中,但尚未添加到钥匙串ACL中。

我的计划是使用本地身份验证来触发Face ID提示,然后如果成功,直接访问钥匙串。虽然不像我们为Touch ID拥有的适当的KeyChain ACL API那样安全,但这是我迄今为止想出的最好的解决方案。

https://developer.apple.com/documentation/localauthentication/localauthentication_constants?changes=latest_minor https://developer.apple.com/documentation/localauthentication/labiometrytype?changes=latest_minor


3
我不喜欢给客户一种错觉,即我们提供了更高的安全级别,实际上却采用了不太安全的数据存储方式来保护他们的用户特定数据。Face ID 的整个意义在于提高安全级别,而这种“变通”方法比较不安全。 - bemeyer
2
这只是对此事的跟进 - 苹果已经发布了一份安全文档,其中指出:“钥匙串项目也可以通过 Face ID 进行保护,只有在面部匹配或设备密码输入正确的情况下才能由安全区域释放。”。请参阅 https://images.apple.com/business/docs/FaceID_Security_Guide.pdf - m0ng0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接