Uprość uwierzytelnianie za pomocą karty uwierzytelniania

Karta uwierzytelniania zapewnia bezpieczny i uproszczony proces uwierzytelniania do stosowania w aplikacjach na Androida. Po utworzeniu i uruchomieniu AuthTabIntent możesz wywołać specjalną kartę niestandardową, która umożliwia kompleksowe uwierzytelnianie. Karta jest uproszczona i ma ograniczone możliwości, co pozwala użytkownikom skupić się na wykonywanym zadaniu. Po zakończeniu działania karta powiadamia aplikację o wyniku za pomocą protokołu https lub schematów niestandardowych.

pełna karta niestandardowa,
Rysunek 1. Niestandardowa karta z pełną funkcjonalnością.
Karta uwierzytelniania zawierająca minimalną funkcjonalność
Rysunek 2. Karta uwierzytelniania z minimalnymi możliwościami.

Od wersji 132 Chrome karta uwierzytelniania może bezpośrednio zastąpić istniejące integracje uwierzytelniania kart niestandardowych. W przypadku użytkowników, których urządzenia nie obsługują karty uwierzytelniania, automatycznie używane są karty niestandardowe. Migrację z kart niestandardowych na kartę uwierzytelniającą można przeprowadzić, modyfikując kilka linii kodu.

Jak to działa

W przypadku karty uwierzytelniającej aplikacja kliencka uruchamia specjalną kartę niestandardową, która prezentuje okno przeglądarki z ładowanym adresem URL strony uwierzytelniania. Po zakończeniu procesu karta uwierzytelniania zwraca wynik uwierzytelniania za pomocą wywołania zwrotnego.

Po uwierzytelnieniu, gdy nastąpi przejście do podanego wcześniej adresu URI wywołania zwrotnego, przekierowanie zostanie zarejestrowane i zwrócone do aplikacji klienta za pomocą wywołania zwrotnego. W przypadku przekierowań używających schematu https przeglądarka sprawdza, czy domena przekierowania i aplikacja klienta należą do tego samego wydawcy, korzystając z protokołu Digital Asset Links.

Klient otrzymuje identyfikator URI z schematem przekierowania (lub w przypadku https – hosta i ścieżki przekierowania) za pomocą podanego wywołania zwrotnego. Dane te obejmują kod wyniku oraz wszystkie inne dane udostępnione przez interfejs uwierzytelniania. Możesz użyć tych danych do weryfikacji uwierzytelniania lub obsługi nieudanych scenariuszy.

Dlaczego Auth Tab?

Przed wprowadzeniem karty uwierzytelniania można było używać standardowego zamiaru kart niestandardowych do obsługi przepływów uwierzytelniania. Karta uwierzytelniania jest preferowana, ponieważ zapewnia wyższy poziom zabezpieczeń, uproszczone działanie i wyodrębnia niektóre wewnętrzne elementy uwierzytelniania z kodu klienta. Z tych powodów karta uwierzytelniania zapewnia lepsze wrażenia.

Zwiększone bezpieczeństwo

W typowej implementacji karty niestandardowej wymagana jest intencja, aby otrzymywać dane z okna przeglądarki obsługującego uwierzytelnianie. Wymaga to dodatkowego kodu i może spowodować zakłócenie działania aplikacji. W przypadku karty uwierzytelniającej dane są odbierane za pomocą wywołania zwrotnego, a ich przesyłanie odbywa się bezpośrednio między interfejsem Android API a aplikacją klienta.

Uproszczone działanie

Na karcie niestandardowej użytkownik ma dostęp do dodatkowych funkcji w przeglądarce, które mogą być niepożądane w procesie uwierzytelniania. Karta uwierzytelniania zapewnia uproszczone działanie, które eliminuje większość opcji dostosowywania dostępnych w standardowej karcie niestandardowej. W przypadku przeglądarek Chrome obejmuje to przycisk minimalizowania, menu kontekstowe po długim naciśnięciu i wyszukiwanie dotykiem, a także opcje Otwórz w Chrome, dodawanie do zakładek, pobieranie i udostępnianie oraz Dodaj do ekranu głównego.

Karty uwierzytelniania nadal mają funkcje przeglądarki, takie jak autouzupełnianie wcześniej zapisanych haseł i danych do płatności, przechodzenie do poprzedniej lub następnej strony, odświeżanie, wyświetlanie informacji o stronie, żądanie wersji strony na komputer i tłumaczenie.

Abstrakcyjne dane

Wdrożenie karty uwierzytelniania eliminuje konieczność korzystania z intencji do odbierania danych z przeglądarki, a także filtrów intencji w AndroidManifest.xml, które były wcześniej wymagane do prawidłowego uwierzytelniania. Dzięki temu nie trzeba będzie stosować skomplikowanych rozwiązań po stronie klienta. Niektóre z tych funkcji mogą być nadal uwzględniane w kodzie klienta, aby zapewnić zgodność wsteczną z kartami niestandardowymi w sytuacjach, gdy karta uwierzytelniania nie jest dostępna na urządzeniach użytkowników.

Wdrażanie karty uwierzytelniania

Karta uwierzytelniania wymaga biblioteki uwierzytelniania w przeglądarce AndroidX. Bibliotekę Browser Library z AndroidX można dodać w sekcji zależności w pliku build.gradle projektu. Interfejsy API są dostępne w wersji alfa. Dodaj do pliku kompilacji te elementy:

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

Przed uruchomieniem karty uwierzytelniania zadeklaruj element ActivityResultLauncher, który przyjmuje wartości ActivityResultCaller i ActivityResultCallback. Należy to zrobić przed utworzeniem aktywności lub fragmentu:

// 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();  
}

Następnie użyj AuthTabIntent.Builder, aby utworzyć AuthTabIntent, a potem wywołaj metodę launch. Metody uruchamiania akceptują jeden z 2 zbiorów parametrów na podstawie wymaganego schematu:

  • redirectScheme: w przypadku niestandardowego schematu przekierowania przeglądarka przekierowuje i zwraca identyfikator URI z podanym schematem.

  • redirectHost, redirectPath: w przypadku schematów przekierowania https interfejs API wymaga osobnego hosta i ścieżki, aby przeglądarka mogła wykryć przekierowanie i zwrócić identyfikator URI. Jeśli używasz https, musisz zweryfikować link do zasobu cyfrowego.

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);
}

Migracja z kart niestandardowych na kartę uwierzytelniania

Zaktualizuj dotychczasową implementację uwierzytelniania kart niestandardowych, zmieniając zamiar kart niestandardowych na nowy zamiar karty uwierzytelniania. Po dodaniu kodu znajdź działanie „Custom Tabs” i zmodyfikuj je, aby stało się działaniem „Auth Tab”.

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);

Użycie kart niestandardowych jako karty zastępczej

Niektóre implementacje mogą wymagać uwierzytelniania, gdy urządzenie użytkownika nie obsługuje karty uwierzytelniania. Może się tak zdarzyć, jeśli domyślna przeglądarka nie obsługuje karty uwierzytelniania lub jeśli jej wersja nie jest wystarczająco nowa. W takich przypadkach w przypadku przeglądarek obsługujących karty niestandardowe zamiar AuthTab automatycznie uruchamia kartę niestandardową.

Aby rozwiązać ten problem, dodaj implementację karty uwierzytelniającej, zachowując dotychczasowy kod kart niestandardowych, który będzie obsługiwał przepływy uwierzytelniania jako zapasowy.

Użytkownicy urządzeń z obsługą kart uwierzytelniania zobaczą nowy proces, a inni użytkownicy skorzystają ze starszej implementacji kart niestandardowych. Uważnie zarządzaj danymi, które mogą być przesyłane do usługi ActivityResultCallback lub do intencji Activity. Jeśli do uruchomienia wersji zapasowej używana jest opcja AuthTabIntent, a karta uwierzytelniania nie jest obsługiwana przez bieżącą przeglądarkę, po zamknięciu karty niestandardowej aplikacja otrzyma wynik Activity.RESULT_CANCELED.

Przykład implementacji karty uwierzytelniania z opcją uruchamiania kart niestandardowych znajdziesz w bibliotece Android Browser Helper.

Dodatkowe materiały