Migrer des applications Android qui utilisent un répartiteur d’ADAL.NET vers MSAL.NET

Si vous avez une application Xamarin Android qui utilise actuellement Bibliothèque d’authentification Azure Active Directory pour .NET (ADAL.NET) et un répartiteur d’authentification, il est temps de migrer vers le bibliothèque d’authentification Microsoft pour .NET (MSAL.NET).

Prérequis

Étape 1 : Activer le répartiteur

Code ADAL actuel :Contrepartie MSAL :
Dans ADAL.NET, la prise en charge du répartiteur est activée pour chaque contexte d’authentification.

Pour appeler le répartiteur, vous deviez définir un indicateur useBroker sur true dans le constructeur PlatformParameters :

public PlatformParameters(
        Activity callerActivity,
        bool useBroker)

Dans le code de rendu de page spécifique à la plateforme pour Android, vous définissez l’indicateur useBroker sur true :

page.BrokerParameters = new PlatformParameters(
        this,
        true,
        PromptBehavior.SelectAccount);

Ensuite, incluez les paramètres dans l’appel d’acquisition de jeton :

AuthenticationResult result =
        await
            AuthContext.AcquireTokenAsync(
                Resource,
                ClientId,
                new Uri(RedirectURI),
                platformParameters)
                .ConfigureAwait(false);
Dans MSAL.NET, la prise en charge du répartiteur est activée pour chaque application cliente publique (PublicClientApplication).

Utilisez le paramètre WithBroker() (défini sur true par défaut) pour appeler le répartiteur :

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithRedirectUri(redirectUriOnAndroid)
                .Build();

Ensuite, dans l’appel AcquireToken :

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Étape 2 : Définir une activité

Dans ADAL.NET, vous avez passé une activité (généralement MainActivity) dans le cadre de PlatformParameters, comme indiqué dans Étape 1 : Activer le répartiteur.

MSAL.NET utilise également une activité, mais elle n’est pas requise dans le cas d’une utilisation Android normale sans répartiteur. Pour pouvoir utiliser le répartiteur, définissez l’activité pour qu’elle envoie et reçoive des réponses du répartiteur.

Code ADAL actuel :Contrepartie MSAL :
L’activité est transmise dans l’élément PlatformParameters de la plateforme spécifique à Android.
page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

Dans MSAL.NET, effectuez deux opérations pour définir l’activité pour Android :

  1. Dans MainActivity.cs, définissez App.RootViewController sur MainActivity pour vous assurer qu’il existe une activité avec l’appel du répartiteur.

    S’il n’est pas défini correctement, vous pouvez recevoir cette erreur : "Activity_required_for_android_broker":"Activity is null, so MSAL.NET cannot invoke the Android broker. See https://aka.ms/Brokered-Authentication-for-Android".

  2. Sur l’appel AcquireTokenInteractive, utilisez .WithParentActivityOrWindow(App.RootViewController) et transmettez la référence à l’activité que vous allez utiliser. Cet exemple utilise MainActivity.

Par exemple :

Dans App.cs :

   public static object RootViewController { get; set; }

Dans MainActivity.cs :

   LoadApplication(new App());
   App.RootViewController = this;

Dans l’appel AcquireToken :

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Étapes suivantes

Pour plus d’informations sur les considérations spécifiques à Android lors de l’utilisation de MSAL.NET avec Xamarin, consultez Configuration requise et conseils de dépannage pour Xamarin Android avec MSAL.NET.