如何在3次错误的触摸/面部识别识别后忽略iOS设备PIN提示

时间:2018-06-12 15:12:32

标签: ios acl keychain touch-id face-id

我们的应用程序使用生物识别技术从Keychain保存和检索项目以进行身份​​验证。

在第3次错误尝试时,我被重定向到设备PIN码。而是想提示一条消息说3次不正确的尝试。

检索项目的代码

OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)(query), &dataTypeRef);

看到了美国银行应用程序的预期行为,其中显示了一条消息,用户需要在3次不正确的尝试后手动登录

1 个答案:

答案 0 :(得分:1)

我假设您正在kSecAccessControlUserPresence项目中使用SecAccessControlCreateWithFlags选项,这是查询的一部分,用于将项目添加到钥匙串中。在某个地方,您会看到以下内容:

SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
                        kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
                        kSecAccessControlUserPresence,
                        nil);

kSecAccessControlUserPresence选项的文档说明:

  

约束使用生物特征或密码访问项目。

根据需要,它将退回到密码。要将其限制为仅使用生物识别,应使用kSecAccessControlBiometryAnykSecAccessControlBiometryCurrentSet标志。两者都需要使用TouchID或FaceID来解锁该项目。 kSecAccessControlBiometryAny需要任何匹配的生物特征,即使在设置了钥匙串项目之后更改了它们。如果用户在TouchID中添加或删除手指或重新注册FaceID,则kSecAccessControlBiometryCurrentSet会使该项目无效。

对于kSecAccessControlBiometryAny,您应该将以上访问控制代码更改为以下任一代码:

SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
                        kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
                        kSecAccessControlBiometryAny,
                        nil);

kSecAccessControlBiometryCurrentSet的这个:

SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
                        kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
                        kSecAccessControlBiometryCurrentSet,
                        nil);

关于SecAccessControlCreateFlags的Apple文档:https://developer.apple.com/documentation/security/secaccesscontrolcreateflags?changes=_2&language=objc