Как реализовать WebAuthn в приложении для Android?

Я собираюсь использовать WebAuthn для аутентификации, как показано на демонстрационном сайте https://webauthn.io

Оказывается, Android WebView (и его аналог для iOS) не реализует этого, и прямо заявлено, что этого не произойдет. Один из них обращается к использованию вкладки Chrome.

Но я хочу не использовать для этого HTML / JavaScript на мобильном устройстве, то есть внутри приложения. В приложении я хотел бы использовать библиотеку Java, аналогичную Firebase, но которая предоставляет средства для использования той же учетной записи, которая была настроена через WebAuthn, или для настройки учетной записи через библиотеку в приложении, к которой впоследствии можно будет получить доступ. в браузере с помощью WebAuthn.

Я столкнулся с AppAuth https://github.com/openid/AppAuth-Android, и я не уверен, связано ли это с WebAuthn.

Моя цель - использовать систему аутентификации без пароля и электронной почты, чтобы пользователи могли использовать ее в Интернете через WebAuthn, а также получить доступ своих приложений к серверной части через библиотеку от их имени. Система, которая не требует, чтобы у кого-то была учетная запись пользователя в Facebook, Google или любом другом провайдере.

Я бы хотел избежать использования обходного пути, такого как вкладка Chrome в приложении для Android, все это должно обрабатываться на Java, а взаимодействие с пользователем через фрагменты.

Какие у меня варианты? Может ли FIDO2 предложить все необходимое для этого? Как это связано с OAuth 2.0?


person Daniel F    schedule 27.08.2019    source источник
comment
Поддержка FIDO2 появилась в Android 7.0 Nougat (API 24) и выше. Вот справочник по API FIDO2 ›developers.google .com / android / reference / com / google / android / gms / Вот кодовая лаборатория FIDO ›codelabs.developers.google.com/codelabs/fido2-for-android/#0 Надеюсь, это поможет   -  person albeee    schedule 20.05.2020


Ответы (2)


WebAuthn является стандартом для браузеров, а это означает, что на сегодняшний день он может быть реализован только в браузерах. На Android это действительно ограничено браузером ChromeCustomTabs. В iOS это может быть разрешено во внутренних веб-просмотрах, но все же в веб-компоненте.

Невозможно заставить его работать с собственным пользовательским интерфейсом, особенно потому, что аутентификация WebAuthn привязана к URI (которого нет в собственном пользовательском интерфейсе мобильного приложения).

WebAuthn и OAuth2 не связаны. OAuth2 - это протокол управления доступом к API: сначала вы получаете токены на сервере авторизации с помощью веб-потока (за исключением некоторых особых случаев), который обычно включает процесс аутентификации и авторизации, а затем потребляете эти токены доступа. на API, который их проверяет. WebAuthn - это схема аутентификации: после первоначальной регистрации пользователь может аутентифицироваться с помощью аутентификатора без представления пароля.

Единственная связь между этими двумя вещами заключается в том, что WebAuthn можно использовать в качестве схемы аутентификации в процессе аутентификации OAuth2 (вместо пароля, OTP, отправленного по электронной почте или SMS, push-уведомления ...).

Если вы хотите иметь единый процесс аутентификации между вашим собственным приложением и некоторыми из ваших веб-приложений на одном и том же мобильном устройстве, лучше всего использовать уникальную центральную службу аутентификации, которая будет заниматься аутентификацией и SSO (Single Sign-On). . Это не позволяет пользователю иметь несколько учетных записей, процессы регистрации и аутентификации.

Для этого ваше собственное мобильное приложение тоже должно его использовать - и, следовательно, использовать веб-аутентификацию. AppAuth - это библиотека, которая позволяет делать такие вещи и использует протокол OAuth2 (и, следовательно, предоставляет токены доступа OAuth2 для доступа к API). Поскольку ваше собственное приложение не имеет данных внутри себя, но ему нужно где-то извлекать данные (возможно, через API), это может быть то, что вам нужно. Но, насколько мне известно, вы не можете достичь единого входа с фрагментами, потому что любой компонент, не относящийся к ChromeCustomeTab, не будет делиться файлами cookie вне приложения.

person Tangui    schedule 27.08.2019
comment
WebAuthn можно встроить в Android с помощью Fido2ApiClient (developers.google.com/android/reference/com/google/android/gms/) Вот полная лаборатория кода Google, объясняющая этот процесс. - person Imran Baig; 11.09.2020

Android WebAuthn

В случае с Android WebAuthn может быть реализован двумя способами.

1 Собственная реализация: с помощью Fido2ApiClient, но для этого требуется, чтобы сервер аутентификации предоставлял интерфейсы веб-запросов для присоединения учетных данных Fido к серверу. Лаборатория кода доступна здесь https://codelabs.developers.google.com/codelabs/fido2-for-android/#0

2 Реализация настраиваемой вкладки:
В реализации настраиваемой вкладки необходимо запустить URL-адрес веб-сайта, реализующего WebauthN. Веб-сайт будет выполнять операции, связанные с учетными данными Fido, с использованием клиентских скриптов. В конце концов, он будет вызывать ссылку перенаправления для приложения, которое будет обрабатывать действие, используя объявление хоста и схемы для действия в manifest.xml. Android CustomTabsIntent.Builder предлагает множество вариантов стиля и настройки интерфейса на вкладке браузера Chrome См. ссылку

Примечание WebAuthN не работает во встроенном WebView для Android

iOS WebAuthN iOS ATM предлагает только один вариант - настраиваемую вкладку в браузере и обработку перенаправленного URL-адреса в конце приложения.

person Imran Baig    schedule 11.09.2020