ブローカーを使用する Android アプリケーションを ADAL.NET から MSAL.NET に移行する

Xamarin Android アプリで現在 Azure Active Directory Authentication Library for .NET (ADAL.NET) と認証ブローカーが使用されている場合は、この時点で Microsoft Authentication Library for .NET (MSAL.NET) に移行します。

前提条件

Note

MSAL.NET バージョン 4.61.0 以降では、ユニバーサル Windows プラットフォーム (UWP)、Xamarin Android、Xamarin iOS はサポートされていません。 Xamarin アプリケーションを MAUI などの最新のフレームワークに移行することをお勧めします。 この非推奨化については、「Announcing the Upcoming Deprecation of MSAL.NET for Xamarin and UWP」で詳しく説明しています。

手順 1:ブローカーを有効にします

現在の ADAL でのコード:MSAL での該当部分:
ADAL.NET では、ブローカーのサポートは認証ごとのコンテキストで有効になっています。

ブローカーを呼び出すには、PlatformParameters コンストラクターで useBrokertrue に設定する必要がありました。

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 ごとに有効になります。

(既定で true に設定されている) WithBroker() パラメーターを使用して、ブローカーを呼び出します。

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

次に、AcquireToken 呼び出しで次の手順に従います。

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

手順 2:アクティビティを設定する

ADAL.NET で、手順 1: ブローカーを有効にするで示したように、PlatformParameters の一部としてアクティビティ (通常は MainActivity) を渡しました。

MSAL.NET でもアクティビティが使用されますが、ブローカーを使用せずに通常どおりに Android を使用する場合は必要ありません。 ブローカーを使用するには、ブローカーから応答が送受信されるようにアクティビティを設定します。

現在の ADAL でのコード:MSAL での該当部分:
アクティビティは、Android 固有のプラットフォームで PlatformParameters に渡されます。
page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

MSAL.NET で Android のアクティビティを設定するには、次の 2 つの操作を行います。

  1. MainActivity.cs で、App.RootViewControllerMainActivity に設定して、アクティビティでブローカーが呼び出されるようにします。

    正しく設定されていないと、「"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();

次のステップ

Xamarin で MSAL.NET を使用する際の Android 固有の考慮事項の詳細については、MSAL.NET を使用した Xamarin Android の構成要件とトラブルシューティング ヒントに関するページを参照してください。