Simplifier l'authentification à l'aide de l'onglet "Authentification"

L'onglet "Authentification" fournit un flux d'authentification sécurisé et simplifié à utiliser dans les applications Android. En créant et en lançant un AuthTabIntent, vous pouvez appeler un onglet personnalisé spécialisé conçu pour gérer une expérience d'authentification de bout en bout. L'onglet est simplifié et offre des fonctionnalités limitées, ce qui permet aux utilisateurs de se concentrer sur la tâche à accomplir. Une fois l'opération terminée, l'onglet rappelle votre application avec un résultat utilisant des schémas https ou personnalisés.

Un onglet personnalisé complet
Figure 1. Onglet personnalisé complet
Un onglet d'authentification contenant des fonctionnalités minimales
Figure 2. Onglet "Authentification" avec des fonctionnalités minimales.

À partir de Chrome 132, l'onglet d'authentification peut remplacer directement les intégrations d'authentification des onglets personnalisés existantes. Pour les utilisateurs dont les appareils ne sont pas compatibles avec l'onglet d'authentification, le passage aux onglets personnalisés est automatique. Pour migrer des onglets personnalisés vers l'onglet d'authentification, il suffit de modifier quelques lignes de code.

Fonctionnement

Avec l'onglet d'authentification, une application cliente lance un onglet personnalisé spécialisé qui présente une fenêtre de navigateur chargeant une URL avec la page d'authentification attendue. Une fois l'authentification terminée, l'onglet d'authentification renvoie le résultat de l'authentification à l'aide d'un rappel.

Après l'authentification, lorsqu'une navigation vers l'URI de redirection de rappel précédemment fourni se produit, la redirection est capturée et renvoyée à l'application cliente à l'aide du rappel. Pour les redirections utilisant le schéma https, le navigateur vérifie que le domaine de redirection et l'application cliente appartiennent au même éditeur à l'aide de Digital Asset Links.

Le client reçoit l'URI parcouru avec le schéma de redirection (ou, pour https, l'hôte et le chemin de redirection) à l'aide du rappel fourni. Ces données incluent un code de résultat ainsi que toutes les autres données fournies par l'interface d'authentification. Vous pouvez utiliser ces données pour valider l'authentification ou gérer les scénarios d'échec.

Pourquoi l'onglet "Authentification" ?

Avant l'onglet d'authentification, vous pouviez utiliser une intention d'onglets personnalisés standard pour alimenter les flux d'authentification. Un onglet d'authentification est préférable, car il offre une sécurité renforcée et une expérience simplifiée. Il permet également d'abstraire certains éléments internes de l'authentification du code client. C'est pourquoi l'onglet "Authentification" offre une meilleure expérience.

Sécurité renforcée

Dans une implémentation d'onglets personnalisés typique, une intention est requise pour recevoir des données de la fenêtre du navigateur qui gère l'authentification. Cela nécessite du code supplémentaire et expose votre application à des interférences potentielles dans votre intention. Avec un onglet d'authentification, les données sont reçues à l'aide d'un rappel, avec un transfert direct des données entre l'API Android et l'application cliente.

Une expérience simplifiée

Dans un onglet personnalisé, l'utilisateur a accès à des fonctionnalités supplémentaires du navigateur qui peuvent être indésirables pour un flux d'authentification. Un onglet d'authentification offre une expérience simplifiée qui supprime la plupart des options de personnalisation disponibles dans un onglet personnalisé standard. Pour les navigateurs Chrome, cela inclut le bouton de réduction, le menu contextuel d'appui prolongé et la fonctionnalité Toucher pour rechercher, ainsi que les éléments de menu Ouvrir dans Chrome, Ajouter aux favoris, Télécharger et Partager, et Ajouter à l'écran d'accueil.

Les onglets d'authentification conservent des fonctionnalités permettant au navigateur de remplir automatiquement les mots de passe et les paiements précédemment enregistrés, de revenir en arrière ou d'avancer, d'actualiser, d'afficher les informations sur la page, de demander une version pour ordinateur de la page et de fournir une traduction.

Abstraction des données

L'implémentation de l'onglet d'authentification seul élimine le besoin d'une intention de recevoir des données du navigateur, ainsi que des filtres d'intention dans AndroidManifest.xml précédemment requis pour que l'authentification fonctionne correctement. Cela simplifie le côté client. Certaines de ces fonctionnalités peuvent toujours être incluses dans le code client pour assurer la rétrocompatibilité avec les onglets personnalisés dans les situations où l'onglet d'authentification n'est pas disponible sur les appareils des utilisateurs.

Implémenter l'onglet "Authentification"

L'onglet "Authentification" nécessite la bibliothèque d'authentification du navigateur AndroidX. La bibliothèque AndroidX Browser peut être ajoutée dans la section des dépendances du fichier build.gradle d'un projet. Les API sont disponibles dans une version alpha. Ajoutez le code suivant à votre fichier build :

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

Avant de lancer un onglet d'authentification, déclarez un ActivityResultLauncher qui prend un ActivityResultCaller ainsi qu'un ActivityResultCallback. Cela se fait avant la création de l'activité ou du fragment :

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

Ensuite, utilisez AuthTabIntent.Builder pour créer un AuthTabIntent, puis appelez la méthode launch. Les méthodes de lancement acceptent l'un des deux ensembles de paramètres en fonction du schéma dont vous avez besoin :

  • redirectScheme : pour un schéma de redirection personnalisé, le navigateur redirige et renvoie l'URI avec le schéma fourni.

  • redirectHost, redirectPath : pour les schémas de redirection HTTPS, l'API nécessite un hôte et un chemin d'accès distincts pour que le navigateur détecte la redirection et renvoie l'URI. Lorsque vous utilisez le protocole HTTPS, la validation Digital Asset Links est obligatoire.

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

Migrer des onglets personnalisés vers l'onglet d'authentification

Mettez à jour votre implémentation d'authentification des onglets personnalisés existante en modifiant l'intent des onglets personnalisés pour qu'il corresponde au nouvel intent Auth Tab. Après avoir ajouté le code, recherchez l'intent "Custom Tabs" (Onglets personnalisés) et remplacez-le par le nouvel intent "Auth Tab" (Onglet d'authentification).

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

Revenir aux onglets personnalisés

Certaines implémentations peuvent nécessiter une authentification lorsque l'appareil de l'utilisateur n'est pas équipé pour gérer l'onglet "Authentification". Par exemple, cela peut se produire si le navigateur par défaut n'est pas compatible avec l'onglet d'authentification ou si la version du navigateur par défaut n'est pas au niveau requis. Dans ce cas, une intention d'onglet d'authentification lance automatiquement un onglet personnalisé pour les navigateurs compatibles.

Vous pouvez vérifier si l'onglet d'authentification est compatible avec le navigateur à l'aide de CustomTabsClient#isAuthTabSupported(). Cette méthode permet à votre application de choisir de manière dynamique entre le lancement d'un onglet d'authentification ou d'un flux d'onglets personnalisés en fonction des capacités du navigateur. Pour gérer correctement la situation où l'onglet d'authentification n'est pas pris en charge, ajoutez l'implémentation de l'onglet d'authentification tout en conservant votre code d'onglets personnalisés existant pour gérer les flux d'authentification en tant que solution de secours.

Veillez à gérer les données qui peuvent provenir de votre ou de votre intent Activity.ActivityResultCallback Notez que si AuthTabIntent est utilisé pour lancer l'expérience de secours et que l'onglet d'authentification n'est pas compatible avec le navigateur actuel, votre application reçoit un résultat Activity.RESULT_CANCELED lorsque l'onglet personnalisé est fermé.

Vous trouverez un exemple d'implémentation de l'onglet d'authentification avec redirection vers les onglets personnalisés dans la bibliothèque Android Browser Helper.

Ressources supplémentaires