Microsoft Authenticator を使用する iOS アプリケーションを ADAL.NET から MSAL.NET に移行する

あなたは Azure Active Directory Authentication Library for .NET (ADAL.NET) と iOS ブローカーを使用しています。 リリース 4.3 以降の iOS 上でブローカーをサポートする Microsoft Authentication Library for .NET (MSAL.NET) に移行するときが来ました。

どこから始めればよいでしょうか。 この記事では、お使いの Xamarin iOS アプリを ADAL から MSAL に移行する方法について説明します。

前提条件

この記事では、iOS ブローカーと統合されている Xamarin iOS アプリが既にあることを前提としています。 そうでない場合は、MSAL.NET に直接移動し、そこでブローカーの実装を開始します。 MSAL.NET で新しいアプリケーションを使用して iOS ブローカーを呼び出す方法については、こちらのドキュメントを参照してください。

バックグラウンド

ブローカーとは

ブローカーは、Android および iOS に Microsoft が提供するアプリケーションです (iOS と Android については Microsoft Authenticator アプリに関するページ、Android については Intune ポータル サイト アプリを参照してください)。

これでは、次が可能です。

ADAL から MSAL への移行

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

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

PlatformParameters コンストラクターで useBroker フラグを true に設定する必要があります。

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

また、この例では、プラットフォーム固有の iOS 用のページ レンダラーのコードの フラグを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()
                .WithReplyUri(redirectUriOnIos)
                .Build();

トークンの取得の呼び出しで、次のように記述します。

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

手順 2:UIViewController() を設定する

ADAL.NET で、PlatformParameters の一部として UIViewController を渡しました (手順 1 の例を参照してください)。MSAL.NET では、開発者に柔軟性を持たせるためにオブジェクト ウィンドウが使用されますが、通常の iOS の使用では必要ありません。 ブローカーを使用するには、ブローカーから応答を送受信するために、オブジェクト ウィンドウを設定します。

現在の ADAL でのコード:MSAL での該当部分:
UIViewController は

iOS 固有のプラットフォームで PlatformParameters に渡されます。

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
MSAL.NET で、iOS のオブジェクト ウィンドウを設定するには、次の 2 つの操作を行います。
  1. AppDelegate.cs で、App.RootViewController を新しい UIViewController() に設定します。 これを割り当てることにより、UIViewController でのブローカーへの呼び出しが保証されます。 正しく設定されていないと、次のエラーが表示されることがあります。"uiviewcontroller_required_for_ios_broker":"UIViewController is null, so MSAL.NET cannot invoke the iOS broker. See https://aka.ms/msal-net-ios-broker"
  2. AcquireTokenInteractive の呼び出しで、.WithParentActivityOrWindow(App.RootViewController) を使用し、使用するオブジェクト ウィンドウへの参照を渡します。

例:

App.cs:

   public static object RootViewController { get; set; }

AppDelegate.cs:

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

トークンの取得の呼び出しで、次のように記述します。

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

手順 3:コールバックを処理するように AppDelegate を更新する

ADAL と MSAL の両方からブローカーが呼び出され、ブローカーでは AppDelegate クラスの OpenUrl メソッドを使用してアプリケーションにコールバックされます。 詳しくは、こちらのドキュメントをご覧ください。

ADAL.NET と MSAL.NET の間に変更はありません。

手順 4:URL スキームを登録する

ADAL.NET と MSAL.NET では、URL を使用してブローカーを呼び出し、ブローカーの応答をアプリに返します。 次のように、お使いのアプリの Info.plist ファイルに URL スキームを登録します。

現在の ADAL でのコード:MSAL での該当部分:
URL スキームは、お使いのアプリに対して一意です。 .

CFBundleURLSchemes の名前には、

msauth.

がプレフィックスとして、お使いの CFBundleURLName の前に含まれている必要があります。

例: $"msauth.(BundleId")

 <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.xforms</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>msauth.com.yourcompany.xforms</string>
        </array>
      </dict>
    </array>

注意

この URL スキームは、ブローカーから応答を受け取るときにアプリを一意に識別するために使用されるリダイレクト URI の一部になります。

手順 5:LSApplicationQueriesSchemes セクションにブローカー識別子を追加する

ADAL.NET と MSAL.NET は、いずれも -canOpenURL: を使用してブローカーがデバイスにインストールされているかどうかを確認します。 info.plist ファイルの LSApplicationQueriesSchemes セクションには、次のように iOS ブローカー用の正しい識別子を追加します。

現在の ADAL でのコード:MSAL での該当部分:
用途

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
用途

msauthv2

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauthv2</string>
     <string>msauthv3</string>
</array>

手順 6:Azure portal でリダイレクト URI を登録する

ADAL.NET と MSAL.NET のいずれでも、ブローカーをターゲットとするときにリダイレクト URI に対してさらに要件が追加されます。 Azure portal でお使いのアプリケーションにリダイレクト URI を追加します。

現在の ADAL でのコード:MSAL での該当部分:

"<app-scheme>://<your.bundle.id>"

例:

mytestiosapp://com.mycompany.myapp

$"msauth.{BundleId}://auth"

例:

public static string redirectUriOnIos = "msauth.com.yourcompany.XForms://auth";

Azure portal でリダイレクト URI を登録する方法の詳細については、「手順 7:アプリの登録にリダイレクト URI を追加する」を参照してください。

手順 7:Entitlements.plist を設定する

Entitlements.plist ファイルでキーチェーン アクセスを有効にします。

 <key>keychain-access-groups</key>
    <array>
      <string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
    </array>

キーチェーン アクセスの有効化の詳細については、「キーチェーン アクセスの有効化」を参照してください。

次のステップ

MSAL.NET を使用する Xamarin iOS に固有の考慮事項」を参照してください。