Как игнорировать ПИН-код устройства iOS после 3-х неправильных распознаваний прикосновения / идентификатора лица - PullRequest
0 голосов
/ 12 июня 2018

Наше приложение сохраняет и извлекает элементы из цепочки для ключей для аутентификации с использованием биометрических данных.

При 3-й неверной попытке я перенаправлен на ПИН-код устройства.Вместо этого хотелось бы получить сообщение о трех неверных попытках.

Код для извлечения элементов

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

Увидел ожидаемое поведение с приложением Bank of America, где оно показывает сообщение, в котором нуждается пользовательвойти в систему вручную после 3 неправильных попыток

1 Ответ

0 голосов
/ 07 июля 2018

Я предполагаю, что вы используете опцию kSecAccessControlUserPresence в элементе SecAccessControlCreateWithFlags, который является частью вашего запроса, чтобы добавить элементы в цепочку для ключей.Где-то у вас есть что-то похожее на это:

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

Документация для опции kSecAccessControlUserPresence гласит:

Ограничение для доступа к элементу с помощью биометрии или пароля.

При необходимости он вернется к паролю.Чтобы ограничить это использование только биометрии, вы должны использовать флаги kSecAccessControlBiometryAny или kSecAccessControlBiometryCurrentSet.Оба требуют 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

...