Share via


Migración de aplicaciones Android que usan un agente de ADAL.NET a MSAL.NET

Si tiene una aplicación Xamarin Android que usa actualmente la Biblioteca de autenticación de Active Directory para .NET (ADAL.NET) y un agente de autenticación, es el momento de migrar a la Biblioteca de autenticación de Microsoft para .NET (MSAL.NET).

Requisitos previos

Paso 1: Habilitar el agente

Código de ADAL actual:Homólogo de MSAL:
En ADAL.NET, la compatibilidad con el agente se habilita en cada contexto de autenticación.

Para llamar al agente, tenía que establecer una marca useBroker en true en el constructor PlatformParameters:

public PlatformParameters(
        Activity callerActivity,
        bool useBroker)

En el código del representador de páginas específico de la plataforma para Android, se establece la marca useBroker en true:

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

A continuación, incluya los parámetros en la llamada de adquisición de token:

AuthenticationResult result =
        await
            AuthContext.AcquireTokenAsync(
                Resource,
                ClientId,
                new Uri(RedirectURI),
                platformParameters)
                .ConfigureAwait(false);
En MSAL.NET, la compatibilidad con el agente se habilita según el elemento PublicClientApplication.

Use el parámetro WithBroker() (establecido en true de manera predeterminada) para llamar al agente:

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

Después, en la llamada a AcquireToken:

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

Paso 2: Establecer una actividad

En ADAL.NET, se pasaba una actividad (normalmente MainActivity) como parte de PlatformParameters, tal como se muestra en Paso 1: Habilitar el agente.

MSAL.NET también utiliza una actividad, pero no es necesario en el uso normal de Android sin un agente. Para usar el agente, establezca la actividad para enviar y recibir respuestas del agente.

Código de ADAL actual:Homólogo de MSAL:
La actividad se pasa a PlatformParameters en la plataforma específica de Android.
page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

En MSAL.NET, haga dos cosas para establecer la actividad para Android:

  1. En MainActivity.cs, establezca el elemento App.RootViewController en MainActivity para asegurarse de que haya una actividad con la llamada al agente.

    Si no se establece correctamente, puede obtener este error: "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. En la llamada a AcquireTokenInteractive, use .WithParentActivityOrWindow(App.RootViewController) y pase la referencia a la actividad que usará. En este ejemplo se usará MainActivity.

Por ejemplo:

En App.cs:

   public static object RootViewController { get; set; }

En MainActivity.cs:

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

En la llamada a AcquireToken:

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

Pasos siguientes

Para más información sobre las consideraciones específicas de Android al usar MSAL.NET con Xamarin, consulte Requisitos de configuración y sugerencias para la solución de problemas de Xamarin Android con MSAL.NET.