我正在努力为我的应用程序集成触摸 ID 以供用户登录。由于我要存储用户名和密码以供将来通过触摸使用,我发现 localAuthenticate 对我不起作用,我必须使用新的 ACL 来访问钥匙串(keychain)。
我得到了所有代码,可以使用 ACL 读取/写入钥匙串(keychain)。但我现在只看到 SecAccessControlCreateWithFlags(...) 中 SecAccessControlCreateFlags 的一个选项“kSecAccessControlUserPresence”。如果他们不想使用触摸 ID,这允许用户根据苹果文档回退到 PIN 码。无论如何只允许访问那些带有触摸 ID 的键,如果失败,那么用户必须手动输入凭据?
我有其他选择,但我正在努力避免:
选项 A:使用 LocalAuthenticate,我将在 userdeafults 中对我的凭据进行加密,但我必须弄清楚将 key 存储在哪里?有什么想法吗?
选项 B:继续使用 ACL 和 key 链,但我必须弄清楚如果用户使用 PIN 码或触摸 ID 是否存在。如果他们使用 touch id,那么我将继续使用我从 key 链获得的信息登录,如果他们使用 pin,我将使用 LocalAuthenticate 再次询问他们。如果他们取消了它,那么我将不会登录,如果他们使用触摸 ID 进行验证,那么我将使用钥匙串(keychain)中的凭证登录。
更新:以防万一有人问我为什么不想要 PIN,我们的律师不接受将 4 位 PIN 码作为访问我们存储密码的 key 链的方式的概念。
最佳答案
现在可以在 iOS 9 上使用:
kSecAccessControlTouchIDCurrentSet
- “来自当前已注册手指组的触摸 ID。触摸 ID 必须可用并且必须至少注册一个手指。添加或删除手指时,该项目将失效。”kSecAccessControlTouchIDAny
- “Touch ID(任何手指)。Touch ID 必须可用并且必须至少注册一个手指。即使添加或移除手指,Touch ID 仍可访问项目”。
关于objective-c - Touch ID for KeyChain 无 PIN 回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27551134/