ios - 如何在 3 次不正确的触摸/面部 id 识别后忽略 iOS 设备 PIN 提示
问题描述
我们的应用程序使用生物识别技术从钥匙串中保存和检索项目以进行身份验证。
在第三次不正确的尝试中,我被重定向到设备 PIN 码。而是想提示一条消息说 3 次不正确的尝试。
检索项目的代码
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)(query), &dataTypeRef);
看到美国银行应用程序的预期行为,它显示一条消息,用户需要在 3 次错误尝试后手动登录
解决方案
我假设您正在使用作为查询一部分的项目中的kSecAccessControlUserPresence
选项将SecAccessControlCreateWithFlags
项目添加到钥匙串。某处你有一些看起来像这样的东西:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence,
nil);
选项的文档kSecAccessControlUserPresence
指出:
限制使用生物特征或密码访问项目。
它将根据需要回退到密码。要将其限制为仅使用生物识别,您应该使用kSecAccessControlBiometryAny
orkSecAccessControlBiometryCurrentSet
标志。两者都需要 TouchID 或 FaceID 来解锁项目。kSecAccessControlBiometryAny
需要任何匹配的生物特征,即使它们在设置钥匙串项目后被更改。kSecAccessControlBiometryCurrentSet
如果用户在 TouchID 中添加或移除手指或重新注册 FaceID,则会导致项目无效。
您应该将上述访问控制代码更改为kSecAccessControlBiometryAny
:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlBiometryAny,
nil);
或者这个kSecAccessControlBiometryCurrentSet
:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlBiometryCurrentSet,
nil);
Apple 文档SecAccessControlCreateFlags
:https ://developer.apple.com/documentation/security/secaccesscontrolcreateflags?changes=_2&language=objc
推荐阅读
- validation - VeeValidate 多个密码约束
- amazon-web-services - 无法连接到面向 Internet 的 NLB 将流量转发到私有实例
- c++ - 为什么 float 和 double 不能在小数位上识别 0
- java - 如何将方法作为参数传递?
- python - 关于 Monty Hall 问题的程序未返回预期结果
- google-apps-script - 输入数据后锁定谷歌表格中的单元格
- r - 在一个图中绘制不同的列 R
- html - 粘性页脚不会停留
- c# - Oracle Managed Data Reader 为一个数据库表返回 DBNull
- sql - 查看多行以获取列值的 SQL 查询