Можно ли использовать пароль устройства для аутентификации пользователя в приложении iOS?

Я добавляю поддержку аутентификации пользователя в свое приложение. Единственное требование состоит в том, что пользователь должен быть владельцем устройства (приложение не имеет доступа к удаленному сервису и не нуждается в доступе к ключам в связке ключей).

Я прочитал LocalAuthentication документацию по фреймворку и провел эксперименты. Я знаю, что технически возможно вызвать LocalAuthentication API для аутентификации пользователя с помощью идентификатора касания/лица, а в случае неудачи вернуться к запросу пользователя ввести код доступа к устройству.

Однако среди всех iOS-приложений, которыми я пользовался, я ни разу не видел ни одного, которое аутентифицирует пользователя таким образом (я имею в виду, используя пароль устройства). Когда я включаю аутентификацию по сенсорному экрану/лицу в этих приложениях, все они просят меня сначала установить более короткий и почти никогда не используемый пароль для конкретного приложения, что, на мой взгляд, не только неудобно, но и небезопасно. Интересно, почему они просто не используют пароль устройства? Есть ли в Apple Store политика, запрещающая это? Будет ли мое приложение отклонено за это? Спасибо за любое объяснение.

ОБНОВЛЕНИЕ:

Согласно этой статье использование связки ключей более безопасно, чем использование LocalAuthentication, поскольку первое является компонентом системного уровня, а второе — компонентом прикладного уровня. Однако в статье предлагается использовать пароль устройства вместо пароля приложения при доступе к элементам в связке ключей.

Крайне важно, чтобы разработчики настроили контроль доступа к цепочке ключей, чтобы при попытке получить защищенный элемент пользователи должны были аутентифицироваться с помощью кода доступа устройства (и, следовательно, Face ID, если он включен).


person rayx    schedule 08.05.2020    source источник
comment
Я гуглил об этом и не смог найти никакого обсуждения этой темы, кроме этого: stackoverflow.com/questions/46030483/, что, к сожалению, бесполезно.   -  person rayx    schedule 08.05.2020
comment
Я не ожидал, что у вас возникнут какие-либо проблемы. Вот для чего нужна локальная структура аутентификации. Причина, по которой другие приложения могут заставить вас сохранить другой пин-код, заключается в том, что они могут хранить его в связке ключей с настройкой, которая удаляет его, если биометрические данные изменены (например, кто-то добавляет отпечаток пальца или внешний вид). Таким образом, если кто-то попытается добавить свои биометрические данные на ваш телефон (для чего в любом случае требуется код доступа), пин-код будет аннулирован, и они не получат автоматический доступ к этому другому приложению.   -  person Paulw11    schedule 08.05.2020
comment
Привет @Paulw11 Спасибо за повтор. Вы имели в виду флаг kSecAccessControlApplicationPassword, который используется для защиты ключа в связке ключей? Интересно это знать (я не знал об этом, пока вы не упомянули об этом. Спасибо). Но я сомневаюсь, что приложения iOS (например, Microsoft onedrive) на моем телефоне используют код доступа для конкретного приложения таким образом, потому что, хотя эти приложения сохраняют ключ или пароль в цепочке для ключей, они никогда не предлагают мне ввести код доступа для конкретного приложения при получении ключа. . Единственное использование этого пароля — когда я открываю приложение, но это необязательно, потому что будет достаточно использования идентификатора касания / лица.   -  person rayx    schedule 08.05.2020
comment
Тем не менее, я думаю, что ваш ответ очень полезен. Как вы думаете, есть ли шанс, что эти разработчики приложений неправильно использовали эту функцию или просто следовали устаревшему соглашению, которое больше не имеет смысла? И если хотите, не стесняйтесь создавать ответ, используя этот коммит. Я хотел бы дать вам очки репутации :)   -  person rayx    schedule 08.05.2020
comment
В OneDrive и других приложениях Microsoft пин-код используется немного по-другому; Приложениями Microsoft можно управлять с помощью InTune, а PIN-код используется в качестве дополнительного ключа шифрования.   -  person Paulw11    schedule 08.05.2020
comment
Спасибо за информацию. Это сложнее, чем я ожидал. В любом случае, я рад, что можно просто использовать LocalAuthentication для моего приложения, и нет необходимости вводить код доступа для конкретного приложения. Я вернусь и обновлю вопрос, когда успешно отправлю свое приложение (надеюсь, через месяц или около того).   -  person rayx    schedule 08.05.2020


Ответы (1)


Теперь, когда я выпустил собственное приложение в App Store, я думаю, что могу дать окончательный ответ на свой вопрос. На самом деле я задал два вопроса:

  1. Можно ли использовать пароль устройства для аутентификации пользователя в приложении iOS?

О: Да. Я сделал это в своем приложении, и приложение было принято App Store.

  1. Почему в большинстве, если не во всех, приложениях используется специальный код доступа?

О: Я не уверен на 100% в этом. Я думаю, что некоторые приложения делают это, потому что они сохраняют учетные данные пользователя в цепочке для ключей и хотят защитить эти данные с помощью специального кода ключа приложения. Однако для других приложений я подозреваю, что они ни для чего не используют специальный код приложения.

person rayx    schedule 02.07.2020