Упростите аутентификацию с помощью вкладки Auth

Вкладка Auth обеспечивает безопасный и упрощенный процесс аутентификации для использования в приложениях Android. Создав и запустив AuthTabIntent , вы можете вызвать специальную настраиваемую вкладку, предназначенную для управления сквозной аутентификацией. Вкладка урезана и имеет ограниченные возможности, что позволяет пользователям сосредоточиться на текущей задаче. По завершении вкладка вызывает ваше приложение с результатом с использованием https или пользовательских схем.

Полнофункциональная пользовательская вкладка
Рисунок 1. Полнофункциональная пользовательская вкладка.
Вкладка «Аутентификация» с минимальным функционалом
Рисунок 2. Вкладка Auth с минимальными возможностями.

Начиная с Chrome 132, Auth Tab может напрямую заменить существующие интеграции аутентификации Custom Tabs. Для пользователей, чьи устройства не поддерживают вкладку Auth, возврат к пользовательским вкладкам происходит автоматически. Переход с пользовательских вкладок на вкладку аутентификации можно выполнить, изменив несколько строк кода.

Как это работает

С помощью вкладки Auth клиентское приложение запускает специализированную настраиваемую вкладку, которая представляет собой окно браузера, загружающее URL-адрес с ожидаемой страницей аутентификации. После завершения вкладка Auth возвращает результат аутентификации с помощью обратного вызова.

После аутентификации, когда происходит переход к ранее предоставленному URI перенаправления обратного вызова, перенаправление фиксируется и возвращается клиентскому приложению с помощью обратного вызова. При перенаправлении с использованием схемы https браузер проверяет, что домен перенаправления и клиентское приложение принадлежат одному и тому же издателю, используя ссылки на цифровые активы .

Клиент получает URI навигации со схемой перенаправления (или для https — хост и путь перенаправления), используя предоставленный обратный вызов. Эти данные включают в себя код результата, а также любые другие данные, предоставляемые интерфейсом аутентификации. Вы можете использовать эти данные для проверки аутентификации или обработки неудачных сценариев.

Почему вкладка «Аутентификация»?

До использования вкладки Auth вы могли использовать стандартные пользовательские вкладки для обеспечения потоков аутентификации. Вкладка «Аутентификация» предпочтительнее, поскольку она обеспечивает повышенную безопасность, упрощает работу, а также абстрагирует некоторые внутренние функции аутентификации от клиентского кода. По этим причинам вы обнаружите, что вкладка Auth обеспечивает лучший опыт.

Повышенная безопасность

В типичной реализации пользовательской вкладки требуется намерение получить данные из окна браузера, обрабатывающего аутентификацию. Это требует дополнительного кода и подвергает ваше приложение потенциальному вмешательству в ваши намерения. При использовании вкладки Auth данные принимаются с помощью обратного вызова с прямой передачей данных между Android API и клиентским приложением.

Оптимизированный опыт

На настраиваемой вкладке пользователь имеет доступ к дополнительным функциям браузера, которые могут быть нежелательны для потока аутентификации. Вкладка «Аутентификация» обеспечивает упрощенный интерфейс, в котором удалено большинство параметров настройки, доступных на стандартной настраиваемой вкладке. В браузерах Chrome это включает кнопку свертывания, контекстное меню при длительном нажатии и нажатие для поиска, а также элементы меню для открытия в Chrome , добавления в закладки, загрузки и публикации, а также добавления на главный экран .

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

Абстракция данных

Реализация вкладки Auth сама по себе устраняет необходимость в намерении получать данные из браузера, а также в фильтрах намерений в AndroidManifest.xml , которые ранее требовались для правильной работы аутентификации. Это устраняет сложности на стороне клиента. Некоторые из этих функций по-прежнему можно включить в клиентский код для обеспечения обратной совместимости с настраиваемыми вкладками в ситуациях, когда вкладка проверки подлинности недоступна на пользовательских устройствах.

Реализация вкладки «Аутентификация»

Для вкладки Auth требуется библиотека аутентификации браузера AndroidX . Библиотеку браузера AndroidX можно добавить в раздел зависимостей файла build.gradle проекта. API доступны в альфа-версии. Добавьте в файл сборки следующее:

dependencies {
    implementation 'androidx.browser:browser:1.9.0-alpha01'
}

Прежде чем запускать вкладку Auth, объявите ActivityResultLauncher , который принимает ActivityResultCaller а также ActivityResultCallback . Это делается до создания активности или фрагмента:

// In your activity

private final ActivityResultLauncher<Intent> mLauncher =
    AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);

private void handleAuthResult(AuthResult result) {
    String message = switch (result.resultCode) {
        case AuthTabIntent.RESULT_OK -> "Received auth result.";
        case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
        case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
        case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
    }

    if (result.resultCode == AuthTabIntent.RESULT_OK) {
        message += " Uri: " + result.resultUri;
    }

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();  
}

Затем используйте AuthTabIntent.Builder для создания AuthTabIntent , а затем вызовите метод launch . Методы запуска принимают один из двух наборов параметров в зависимости от необходимой вам схемы:

  • redirectScheme : для пользовательской схемы перенаправления браузер перенаправляет и возвращает URI с предоставленной схемой.

  • redirectHost, redirectPath : для схем перенаправления https API требует отдельный хост и путь, чтобы браузер мог обнаружить перенаправление и вернуть URI. При использовании https требуется проверка Digital Asset Link.

private void launchAuthTab() {
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}

private void launchAuthTabHttps() {
    String host = "your_host";
    String path = "your_path";
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}

Переход с пользовательских вкладок на вкладку аутентификации

Обновите существующую реализацию аутентификации настраиваемых вкладок, изменив намерение «Пользовательские вкладки» на новое намерение «Вкладка аутентификации». После добавления кода найдите намерение «Пользовательские вкладки» и измените его на новое намерение «Вкладка аутентификации».

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)

// change to -->

AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");

/* - OR - */

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);

Возврат к пользовательским вкладкам

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

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

Пользователи с устройствами, поддерживающими вкладку аутентификации, видят новый процесс вкладки аутентификации, в то время как другие возвращаются к устаревшей реализации пользовательских вкладок. Позаботьтесь об обработке данных, которые могут поступить либо в ваш ActivityResultCallback , либо в ваше намерение Activity. Обратите внимание: если AuthTabIntent используется для запуска резервного варианта, а вкладка Auth не поддерживается текущим браузером, ваше приложение получает результат Activity.RESULT_CANCELED при закрытии настраиваемой вкладки.

Пример реализации вкладки Auth с возвратом к пользовательским вкладкам можно найти в библиотеке Android Browser Helper .

Дополнительные ресурсы