Перенос приложений Android, использующих брокера, с ADAL.NET на MSAL.NET

Если у вас есть приложение Xamarin для Android, которое в настоящее время использует библиотеку аутентификации Azure Active Directory для .NET (ADAL.NET) и брокер аутентификации, пора перейти на библиотеку аутентификации Microsoft для .NET (MSAL.NET).

Необходимые компоненты

Шаг 1. Включение брокера

Текущий код ADAL:Аналог в MSAL:
В ADAL.NET поддержка брокера включается для каждого контекста аутентификации.

Чтобы вызвать брокера, вам нужно было установить useBroker на true в конструкторе PlatformParameters:

public PlatformParameters(
        Activity callerActivity,
        bool useBroker)

В коде отрисовщика страниц для Android, зависящего от платформы, вы устанавливаете флаг useBroker в значение true:

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

Затем включите параметры в вызов токена получения:

AuthenticationResult result =
        await
            AuthContext.AcquireTokenAsync(
                Resource,
                ClientId,
                new Uri(RedirectURI),
                platformParameters)
                .ConfigureAwait(false);
В MSAL.NET поддержка брокера включается для каждого приложения PublicClientApplication.

Используйте параметр WithBroker() (который по умолчанию имеет значение true) для вызова брокера:

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

Затем в вызове AcquireToken:

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

Шаг 2. Установите действие

В ADAL.NET вы передали действие (обычно MainActivity) как часть PlatformParameters, как показано на Шаге 1: включение брокера.

MSAL.NET также использует действие, но оно не требуется при обычном использовании Android без посредника. Чтобы использовать брокера, установите действие для отправки и получения ответов от брокера.

Текущий код ADAL:Аналог в MSAL:
Действие передается в PlatformParameters на платформе Android.
page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

В MSAL.NET сделайте две вещи, чтобы установить активность для Android:

  1. В MainActivity.cs задайте для App.RootViewController значение MainActivity, чтобы обеспечить наличие действия с вызовом брокера.

    Если он установлен неправильно, вы можете получить такую ошибку: "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. При вызове AcquireTokenInteractive используйте .WithParentActivityOrWindow(App.RootViewController) и передайте ссылку на действие, которое вы будете использовать. В этом примере будет использоваться MainActivity.

Пример.

В App.cs:

   public static object RootViewController { get; set; }

В MainActivity.cs:

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

В вызове AcquireToken:

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

Следующие шаги

Дополнительные сведения об особенностях Android при использовании MSAL.NET с Xamarin см. в разделе Требования к конфигурации и советы по устранению неполадок для Xamarin Android с MSAL.NET.