Migrar aplicativos Android que usam um agente de ADAL.NET para MSAL.NET

Se você tem um aplicativo Xamarin Android usando a ADAL.NET (Biblioteca de Autenticação do Azure Active Directory para .NET) e um agente de autenticação, é hora de migrar para a MSAL.NET (Biblioteca de Autenticação da Microsoft para .NET).

Pré-requisitos

Etapa 1: habilitar o agente

Código de ADAL atual:Equivalente de MSAL:
No ADAL.NET, o suporte do agente é habilitado por contexto de autenticação.

Para chamar o agente, você precisava definir um useBroker como true no construtor PlatformParameters:

public PlatformParameters(
        Activity callerActivity,
        bool useBroker)

No código do renderizador de páginas específico da plataforma para Android, defina o sinalizador useBroker como true:

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

Em seguida, inclua os parâmetros na chamada de token de aquisição:

AuthenticationResult result =
        await
            AuthContext.AcquireTokenAsync(
                Resource,
                ClientId,
                new Uri(RedirectURI),
                platformParameters)
                .ConfigureAwait(false);
No MSAL.NET, o suporte do Broker é habilitado por PublicClientApplication.

Use o parâmetro WithBroker() (que é definido como true por padrão) para chamar o agente:

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

Em seguida, na chamada AcquireToken:

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

Etapa 2: definir uma atividade

No ADAL.NET, você passou uma atividade (geralmente a MainActivity) como parte dos PlatformParameters, conforme mostrado na Etapa 1: habilitar o agente.

O MSAL.NET também usa uma atividade, mas não é necessário no uso normal do Android sem um agente. Para usar o agente, defina a atividade para enviar e receber respostas do agente.

Código de ADAL atual:Equivalente de MSAL:
A atividade é passada para os PlatformParameters na plataforma específica do Android.
page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

No MSAL.NET, faça duas coisas para definir a atividade para Android:

  1. Em MainActivity.cs, defina o App.RootViewController como MainActivity para garantir que haja uma atividade com a chamada para o agente.

    Se não estiver definido corretamente, você poderá receber este erro: "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. Na chamada AcquireTokenInteractive, use .WithParentActivityOrWindow(App.RootViewController) e passe a referência para a atividade que será usada. Este exemplo usará a MainActivity.

Por exemplo:

Em App.cs:

   public static object RootViewController { get; set; }

Em MainActivity.cs:

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

Na chamada AcquireToken:

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

Próximas etapas

Para obter mais informações sobre considerações específicas do Android ao usar o MSALNET com Xamarin, confira Requisitos de configuração e dicas de solução de problemas para o Xamarin Android com MSAL.NET.