Partager via


Tutoriel : prise en charge du secours web dans l’application Android

Ce tutoriel montre comment l’erreur isBrowserRequired() se produit et comment vous pouvez la résoudre. La méthode utilitaire isBrowserRequired() vérifie la nécessité d’un mécanisme de secours pour différents scénarios où l’authentification native n’est pas suffisante pour terminer le flux d’authentification de manière fonctionnelle et sécurisée.

Dans ce tutoriel, vous allez apprendre à :

  • Vérification isBrowserRequired()
  • Descripteur isBrowserRequired()

Prérequis

Secours Web

Utilisez un mécanisme de secours web pour les scénarios où l’authentification native n’est pas suffisante pour terminer le flux utilisateur.

Lorsque vous initialisez Android SDK, vous spécifiez les types de défis pris en charge par votre application mobile, comme oob et mot de passe.

Si votre application cliente ne peut pas prendre en charge un type de défi requis par Microsoft Entra, la réponse de Microsoft Entra indique que l’application cliente doit continuer avec le flux d’authentification dans le navigateur. Par exemple, vous initialisez le kit SDK avec le type de défi oob, mais dans le centre d’administration Microsoft Entra, vous configurez l’application avec un e-mail avec une méthode d’authentification par mot de passe.

Dans ce cas, la méthode utilitaire isBrowserRequired() retourne la valeur true.

Échantillon de flux

Examinons un exemple de flux qui retourne isBrowserRequired(), et comment faire pour le gérer :

  1. Dans le fichier de configuration JSON, que vous transmettez au kit SDK pendant l’initialisation, ajoutez uniquement le type de défi oob, comme indiqué dans l’extrait de code suivant :

    PublicClientApplication.createNativeAuthPublicClientApplication( 
        requireContext(), 
        R.raw.native_auth_config  // JSON configuration file 
    ) 
    

    La configuration native_auth_config.json contient l’extrait de code suivant :

    {
      "client_id" : "{Enter_the_Application_Id_Here}",
       "authorities" : [
        {
          "type": "CIAM",
          "authority_url": "https://{Enter_the_Tenant_Subdomain_Here}.ciamlogin.com/{Enter_the_Tenant_Subdomain_Here}.onmicrosoft.com/"
        }
      ],
      "challenge_types" : ["oob"],
      "logging": {
        "pii_enabled": false,
        "log_level": "INFO",
        "logcat_enabled": true
      }
    } 
    
  2. Dans le centre d’administration Microsoft Entra, configurez votre flux d’utilisateur de façon à utiliser E-mail avec mot de passe comme méthode d’authentification.

  3. Démarrez un flux d’inscription à l’aide de la méthode signUp(username) du kit SDK. Vous obtenez un SignUpError qui transmet la vérification isBrowserRequired(), car Microsoft Entra attend le type de défi mot de passe et oob, mais vous avez configuré votre kit SDK uniquement avec oob.

  4. Pour vérifier et gérer 'isBrowserRequired()', utilisez l’extrait de code suivant :

    val actionResult = authClient.signUp( 
        username = email 
    ) 
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) { 
        // Handle "browser required" error
    } 
    

    Le code indique que le flux d’authentification ne peut pas être effectué par le biais de l’authentification native, et qu’un navigateur doit être utilisé.

Gérer l’erreur isBrowserRequired()

Pour gérer cette erreur, l’application cliente doit lancer un navigateur et redémarrer le flux d’authentification. Vous pouvez effectuer cela à l’aide de la méthode MSAL (Microsoft Authentication Library) acquireToken().

Pour cela, utilisez les étapes suivantes :

  1. Pour ajouter une URI de redirection à l’application que vous avez enregistrée précédemment, suivez les étapes décrites dans Ajouter une URL de redirection de plateforme.

  2. Pour mettre à jour le fichier de configuration de votre application cliente, effectuez les étapes décrites dans Configurer l’URI de redirection dans la configuration du kit de développement logiciel.

  3. Utilisez l’extrait de code suivant pour acquérir un jeton à l’aide de la méthode acquireToken() :

    val actionResult = authClient.signUp(
        username = email
    )
    if (actionResult is SignUpError && actionResult.isBrowserRequired()) {
        authClient.acquireToken(
            AcquireTokenParameters(
                AcquireTokenParameters.Builder()
                    .startAuthorizationFromActivity(requireActivity())
                    .withScopes(getScopes())
                    .withCallback(getAuthInteractiveCallback())
            )
            // Result will contain account and tokens retrieved through the browser.
        )
    } 
    

Les jetons de sécurité, c’est-à-dire le jeton d’ID, le jeton d’accès et le jeton d’actualisation, que vous obtenez via le flux d’authentification natif sont identique au jeton que vous obtenez via le flux délégué par navigateur.