Authentifizierung mit dem Auth-Tab vereinfachen

Der Auth-Tab bietet einen sicheren und vereinfachten Authentifizierungsablauf für die Verwendung in Android-Apps. Wenn Sie eine AuthTabIntent erstellen und starten, können Sie einen speziellen benutzerdefinierten Tab aufrufen, der für die Verwaltung einer End-to-End-Authentifizierung entwickelt wurde. Der Tab ist reduziert und bietet nur eingeschränkte Funktionen, damit sich Nutzer auf die anstehende Aufgabe konzentrieren können. Nach Abschluss ruft der Tab Ihre Anwendung mit einem Ergebnis über HTTPS oder benutzerdefinierte Schemas zurück.

Ein voll funktionsfähiger benutzerdefinierter Tab
Abbildung 1. Vollständige Funktionen des benutzerdefinierten Tabs
Ein Authentifizierungs-Tab mit minimaler Funktionalität
Abbildung 2. Tab „Authentifizierung“ mit minimalen Funktionen

Ab Chrome 132 kann Auth Tab vorhandene Authentifizierungsintegrationen für benutzerdefinierte Tabs direkt ersetzen. Bei Nutzern, deren Geräte den Auth-Tab nicht unterstützen, erfolgt der Wechsel zu benutzerdefinierten Tabs automatisch. Die Migration von benutzerdefinierten Tabs zum Tab „Authentifizierung“ ist mit wenigen Codezeilen möglich.

Funktionsweise

Mit dem Auth-Tab startet eine Client-App einen speziellen benutzerdefinierten Tab, in dem ein Browserfenster mit einer URL mit der erwarteten Authentifizierungsseite angezeigt wird. Nach Abschluss gibt der Auth-Tab das Authentifizierungsergebnis über einen Rückruf zurück.

Wenn nach der Authentifizierung eine Weiterleitung zur zuvor angegebenen Callback-Weiterleitungs-URI erfolgt, wird die Weiterleitung erfasst und über den Callback an die Clientanwendung zurückgegeben. Bei Weiterleitungen mit dem https-Schema prüft der Browser mithilfe von Digital Asset Links, ob die Weiterleitungsdomain und die Client-App demselben Publisher gehören.

Der Client empfängt den URI, zu dem weitergeleitet wurde, mit dem Weiterleitungsschema (oder für https den Weiterleitungshost und ‑pfad) über den angegebenen Rückruf. Dazu gehören ein Ergebniscode sowie alle anderen Daten, die über die Authentifizierungsoberfläche bereitgestellt werden. Anhand dieser Daten kannst du die Authentifizierung überprüfen oder nicht erfolgreiche Szenarien bearbeiten.

Warum Auth Tab?

Vor der Authentifizierungsseite konnten Sie für Authentifizierungsabläufe eine Standard-Intent für benutzerdefinierte Tabs verwenden. Ein Auth-Tab ist vorzuziehen, da er für mehr Sicherheit, eine optimierte Nutzung und eine Abstraktion einiger Authentifizierungsfunktionen vom Clientcode sorgt. Aus diesen Gründen ist der Auth-Tab die bessere Lösung.

Erweiterte Sicherheitsfunktionen

Bei einer typischen Implementierung von benutzerdefinierten Tabs ist ein Intent erforderlich, um Daten aus dem Browserfenster zu empfangen, das die Authentifizierung verarbeitet. Dies erfordert zusätzlichen Code und setzt Ihre App potenziellen Beeinträchtigungen Ihrer Absicht aus. Bei einem Auth-Tab werden Daten über einen Rückruf empfangen, wobei die Daten direkt zwischen der Android API und der Client-App übertragen werden.

Eine optimierte Mediennutzung

Auf einem benutzerdefinierten Tab hat der Nutzer Zugriff auf zusätzliche Funktionen im Browser, die für einen Authentifizierungsablauf unerwünscht sein können. Ein Authentifizierungs-Tab ist eine vereinfachte Version, bei der die meisten Anpassungsoptionen eines standardmäßigen benutzerdefinierten Tabs entfernt werden. Für Chrome-Browser gehören dazu die Minimierungsschaltfläche, das Kontextmenü, das durch langes Drücken geöffnet wird, die Funktion „Zum Suchen tippen“ sowie die Menüpunkte In Chrome öffnen, „Lesezeichen hinzufügen“, „Herunterladen“ und „Teilen“ sowie Dem Startbildschirm hinzufügen.

Auth-Tabs behalten weiterhin Funktionen für den Browser bei, um zuvor gespeicherte Passwörter und Zahlungsinformationen automatisch auszufüllen, rückwärts oder vorwärts zu wechseln, zu aktualisieren, Seiteninformationen anzuzeigen, eine Desktopversion der Seite anzufordern und eine Übersetzung bereitzustellen.

Datenabstraktion

Durch die Implementierung des Auth-Tabs ist keine Intent-Funktion mehr erforderlich, um Daten vom Browser zu empfangen. Außerdem sind keine Intent-Filter in AndroidManifest.xml mehr erforderlich, die bisher für eine ordnungsgemäße Authentifizierung erforderlich waren. Dadurch wird die Komplexität auf der Clientseite reduziert. Einige dieser Funktionen können weiterhin in den Clientcode aufgenommen werden, um für Abwärtskompatibilität mit benutzerdefinierten Tabs zu sorgen, wenn der Auth-Tab auf den Geräten der Nutzer nicht verfügbar ist.

Auth-Tab implementieren

Für den Tab „Authentifizierung“ ist die Browserauthentifizierungsbibliothek AndroidX erforderlich. Die AndroidX-Browserbibliothek kann im Abschnitt „Abhängigkeiten“ der build.gradle-Datei eines Projekts hinzugefügt werden. Die APIs sind in einem Alpha-Build verfügbar. Fügen Sie Ihrer Build-Datei Folgendes hinzu:

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

Bevor du einen Auth-Tab öffnest, musst du eine ActivityResultLauncher deklarieren, die sowohl eine ActivityResultCaller als auch eine ActivityResultCallback annimmt. Dies geschieht vor dem Erstellen der Aktivität oder des Fragments:

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

Erstellen Sie als Nächstes mit AuthTabIntent.Builder eine AuthTabIntent und rufen Sie dann die Methode launch auf. Je nach Schema werden für die Startmethoden eine von zwei Parametergruppen akzeptiert:

  • redirectScheme: Bei einem benutzerdefinierten Weiterleitungsschema leitet der Browser die URI mit dem angegebenen Schema weiter und gibt sie zurück.

  • redirectHost, redirectPath: Für https-Weiterleitungsschemata benötigt die API einen separaten Host und Pfad, damit der Browser die Weiterleitung erkennt und den URI zurückgibt. Bei der Verwendung von https ist die Überprüfung von Digital Asset Links erforderlich.

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

Von benutzerdefinierten Tabs zum Tab „Authentifizierung“ migrieren

Aktualisieren Sie die vorhandene Implementierung der Authentifizierung für benutzerdefinierte Tabs, indem Sie die Intent-Aktion für benutzerdefinierte Tabs in die neue Intent-Aktion für Authentifizierungs-Tabs ändern. Suchen Sie nach dem Hinzufügen des Codes den Intent „Custom Tabs“ und ändern Sie ihn in den neuen Intent „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);

Fallback auf benutzerdefinierte Tabs

Bei einigen Implementierungen kann eine Authentifizierung erforderlich sein, wenn das Gerät des Nutzers nicht für den Authentifizierungs-Tab geeignet ist. Das kann beispielsweise passieren, wenn der Standardbrowser Auth Tab nicht unterstützt oder die Version des Standardbrowsers nicht die erforderliche Stufe hat. In diesen Fällen wird bei einem Auth-Tab-Intent in Browsern, die benutzerdefinierte Tabs unterstützen, automatisch ein benutzerdefinierter Tab geöffnet.

Fügen Sie die AuthTab-Implementierung hinzu und belassen Sie Ihren vorhandenen Code für benutzerdefinierte Tabs, der AuthFlows als Fallback verarbeitet.

Nutzer mit Geräten, die Auth Tab unterstützen, sehen den neuen Auth Tab-Vorgang, während andere auf die alte Implementierung von benutzerdefinierten Tabs zurückgreifen. Achten Sie darauf, wie Sie mit Daten umgehen, die entweder an Ihre ActivityResultCallback oder an Ihre Aktivitätsabsicht gesendet werden können. Wenn AuthTabIntent zum Starten der Fallback-Umgebung verwendet wird und der Auth-Tab vom aktuellen Browser nicht unterstützt wird, erhält Ihre App das Ergebnis Activity.RESULT_CANCELED, wenn der benutzerdefinierte Tab geschlossen wird.

Ein Beispiel für die Implementierung eines Authentifizierungstabs mit Fallback auf benutzerdefinierte Tabs finden Sie in der Android Browser Helper-Bibliothek.

Zusätzliche Ressourcen