Web API を呼び出すモバイル アプリを構成する

アプリケーションを作成した後、アプリ登録パラメーターを使用してコードを構成する方法を確認します。 モバイル アプリケーションには、作成フレームワークへの適合に関連する複雑な部分が存在します。

モバイル アプリをサポートする Microsoft ライブラリ

次の Microsoft ライブラリはモバイル アプリをサポートしています。

プラットフォーム プロジェクト
GitHub
Package 取得
started
ユーザーのサインイン Web API へのアクセス 一般提供 (GA) または
パブリック プレビュー1
Android (Java) MSAL Android MSAL クイックスタート Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Android (Kotlin) MSAL Android MSAL Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
iOS (Swift/Obj-C) iOS および macOS 用の MSAL MSAL チュートリアル Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Xamarin (.NET) MSAL.NET Microsoft.Identity.Client Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA

1オンライン サービスのユニバーサル ライセンス条項は、パブリック プレビューのライブラリに適用されます。

アプリケーションをインスタンス化する

Android

モバイル アプリケーションでは PublicClientApplication クラスが使用されます。 これをインスタンス化する方法を次に示します。

PublicClientApplication sampleApp = new PublicClientApplication(
                    this.getApplicationContext(),
                    R.raw.auth_config);

iOS

iOS 上のモバイル アプリケーションは、MSALPublicClientApplication クラスをインスタンス化する必要があります。 このクラスをインスタンス化するには、次のコードを使用します。

NSError *msalError = nil;

MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"<your-client-id-here>"];
MSALPublicClientApplication *application = [[MSALPublicClientApplication alloc] initWithConfiguration:config error:&msalError];
let config = MSALPublicClientApplicationConfig(clientId: "<your-client-id-here>")
if let application = try? MSALPublicClientApplication(configuration: config){ /* Use application */}

追加の MSALPublicClientApplicationConfig プロパティで、既定の機関のオーバーライド、リダイレクト URI の指定、または MSAL トークンのキャッシュ動作の変更を行うことができます。

Xamarin または UWP

このセクションでは、Xamarin.iOS、Xamarin.Android、および UWP の各アプリ向けにアプリケーションをインスタンス化する方法について説明します。

アプリケーションをインスタンス化する

Xamarin または UWP では、アプリケーションをインスタンス化する最も簡単な方法は、次のコードを使用することです。 このコードの ClientId は、登録済みアプリの GUID です。

var app = PublicClientApplicationBuilder.Create(clientId)
                                        .Build();

追加の With<Parameter> メソッドを使用して、親 UI の設定、既定の機関のオーバーライド、クライアント名とバージョンの指定 (テレメトリ用)、リダイレクト URI の指定、および使用する HTTP ファクトリの指定を実行します。 たとえば、HTTP ファクトリを使用して、プロキシの処理とテレメトリとログの指定を行います。

次のセクションで、アプリケーションのインスタンス化について詳しく説明します。

親 UI、ウィンドウ、またはアクティビティを指定する

Android では、対話型認証を行う前に親アクティビティを渡します。 iOS でブローカーを使用する場合は、ViewController を渡します。 UWP の場合と同じように、親ウィンドウを渡すことができます。 トークンを取得するときに、それを渡します。 ただし、アプリを作成するときに、コールバックを UIParent を返すデリゲートとして指定することもできます。

IPublicClientApplication application = PublicClientApplicationBuilder.Create(clientId)
  .ParentActivityOrWindowFunc(() => parentUi)
  .Build();

Android では、CurrentActivityPlugin の使用をお勧めします。 結果の PublicClientApplication ビルダー コードは、次の例のようになります。

// Requires MSAL.NET 4.2 or above
var pca = PublicClientApplicationBuilder
  .Create("<your-client-id-here>")
  .WithParentActivityOrWindow(() => CrossCurrentActivity.Current)
  .Build();
他のアプリ ビルド パラメーターを見つける

PublicClientApplicationBuilder で使用できるすべてのメソッドの一覧については、メソッドの一覧を参照してください。

PublicClientApplicationOptions で公開されるすべてのオプションの説明については、リファレンス ドキュメントを参照してください。

Xamarin iOS のタスク

Xamarin iOS で MSAL.NET を使用する場合は、次のタスクを実行します。

詳細については、Xamarin iOS の考慮事項に関する記事を参照してください。

iOS と macOS 用の MSAL のタスク

iOS と macOS 用の MSAL を使用する場合は、次のタスクが必要です。

Xamarin.Android のタスク

Xamarin.Android を使用する場合は、次のタスクを実行します。

詳細については、Xamarin.Android の考慮事項に関する記事を参照してください。

Android でのブラウザーに関する考慮事項については、MSAL.NET での Xamarin.Android 固有の考慮事項に関する記事を参照してください。

UWP のタスク

UWP では企業ネットワークを使用できます。 次のセクションで、企業のシナリオで完了する必要があるタスクについて説明します。

詳細については、MSAL.NET での UWP 固有の考慮事項に関する記事を参照してください。

ブローカーを使用するようにアプリケーションを構成する

Android と iOS では、ブローカーによって次のことが可能になります。

  • シングル サインオン (SSO): Microsoft Entra ID に登録されているデバイスに SSO を使用できます。 SSO を使用すると、ユーザーはアプリケーションごとにサインインする必要がなくなります。
  • デバイスの識別:この設定により、Microsoft Entra デバイスに関連する条件付きアクセス ポリシーが有効になります。 認証プロセスでは、デバイスがワークプレースに参加したときに作成されたデバイス証明書が使用されます。
  • アプリケーション ID の検証:アプリケーションでは、ブローカーを呼び出すときにそのリダイレクト URL が渡されます。 ブローカーによってそれが検証されます。

Xamarin でのブローカーの有効化

Xamarin でブローカーを有効にするには、PublicClientApplicationBuilder.CreateApplication メソッドを呼び出すときに WithBroker() パラメーターを使用します。 既定では、.WithBroker() は true に設定されます。

Xamarin.iOS のブローカー認証を有効にするには、この記事の Xamarin.iOS に関するセクションに記載されている手順に従います。

Android 向け MSAL に対するブローカーの有効化

Android でブローカーを有効にする方法の詳細については、「Android のブローカー認証」を参照してください。

iOS および macOS 用の MSAL に対するブローカーの有効化

iOS および macOS 用の MSAL を使用する Microsoft Entra シナリオでは、ブローカー認証が既定で有効化されています。

次のセクションで、Xamarin.iOS 用の MSAL、または iOS および macOS 用の MSAL のいずれかでブローカー認証をサポートするようにアプリケーションを構成するための手順について説明します。 この 2 つの手順セットでは、一部の手順が異なります。

Xamarin iOS 用のブローカー認証を有効にする

このセクションの手順に従って、Xamarin.iOS アプリが Microsoft Authenticator アプリと通信できるようにします。

手順 1:ブローカーのサポートを有効にする

ブローカー サポートは、既定では無効になっています。 個々の PublicClientApplication クラスに対して有効にすることができます。 PublicClientApplicationBuilder を使用して PublicClientApplication クラスを作成するときに、WithBroker() パラメーターを使用します。 WithBroker() パラメーターは、既定で true に設定されます。

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithReplyUri(redirectUriOnIos) // $"msauth.{Bundle.Id}://auth" (see step 6 below)
                .Build();

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

MSAL.NET でブローカーが呼び出されると、ブローカーがアプリケーションにコールバックします。 それは、AppDelegate.OpenUrl メソッドを使用してコールバックします。 MSAL はブローカーからの応答を待つため、アプリケーションが協力して MSAL.NET を再度呼び出す必要があります。 次のコードに示すように、メソッドをオーバーライドするように AppDelegate.cs ファイルを更新することで、この動作を設定します。

public override bool OpenUrl(UIApplication app, NSUrl url,
                             string sourceApplication,
                             NSObject annotation)
{
 if (AuthenticationContinuationHelper.IsBrokerResponse(sourceApplication))
 {
  AuthenticationContinuationHelper.SetBrokerContinuationEventArgs(url);
  return true;
 }
 else if (!AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url))
 {
  return false;
 }
 return true;
}

このメソッドは、アプリケーションが起動されるたびに呼び出されます。 これは、ブローカーからの応答を処理し、MSAL.NET によって開始された認証プロセスを完了する機会です。

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

Xamarin iOS では、通常は、オブジェクト ウィンドウを設定する必要はありません。 ただし、ここでは、ブローカーに対する応答を送受信できるようにそれを設定する必要があります。 AppDelegate.cs にオブジェクト ウィンドウを設定するには、ViewController を設定します。

オブジェクト ウィンドウを設定するには、次の手順に従います。

  1. AppDelegate.csApp.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();
    

    AcquireToken の呼び出しの場合:

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

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

MSAL.NET は、URL を使用してブローカーを呼び出し、ブローカーの応答をアプリに返します。 ラウンド トリップを終了するには、Info.plist ファイルにアプリの URL スキームを登録します。

アプリの URL スキームを登録するには、次の手順に従います。

  1. CFBundleURLSchemesmsauth プレフィックスを追加します。

  2. CFBundleURLName を末尾に追加します。 次のパターンに従います。

    $"msauth.(BundleId)"

    ここでは、BundleId によってデバイスが一意に識別されます。 たとえば、BundleIdyourcompany.xforms の場合、URL スキームは msauth.com.yourcompany.xforms になります。

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

     <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>
    

手順 5:LSApplicationQueriesSchemes セクションに追加する

MSAL は、–canOpenURL: を使用してブローカーがデバイスにインストールされているかどうかを確認します。 iOS 9 では、アプリケーションが照会できるスキームが Apple によってロックされています。

次のコード例のように、Info.plist ファイルの LSApplicationQueriesSchemes セクションに msauthv2 を追加します。

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

iOS および macOS 用の MSAL のブローカー認証

Microsoft Entra シナリオでは、ブローカー認証が既定で有効化されています。

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

iOS および macOS 用の MSAL でブローカーが呼び出されると、ブローカーは openURL メソッドを使用してアプリケーションにコールバックします。 MSAL がブローカーからの応答を待っているため、アプリケーションが協力して MSAL をコールバックする必要があります。 次のコード例に示すように、メソッドをオーバーライドするように AppDelegate.m ファイルを更新することで、この機能を設定します。

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    return [MSALPublicClientApplication handleMSALResponse:url
                                         sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
}
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

        guard let sourceApplication = options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String else {
            return false
        }

        return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApplication)
    }

iOS 13 以降で UISceneDelegate を採用した場合は、代わりに UISceneDelegatescene:openURLContexts: に MSAL のコールバックを配置します。 MSAL handleMSALResponse:sourceApplication: の呼び出しは URL ごとに 1 回のみにする必要があります。

詳しくは、Apple のドキュメントをご覧ください。

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

iOS および macOS 用の MSAL では、URL を使用してブローカーが呼び出され、ブローカーの応答がアプリに返されます。 ラウンド トリップを終了するには、Info.plist ファイルにアプリの URL スキームを登録します。

アプリのスキームを登録するには:

  1. カスタム URL スキームの前に msauth を付けます。

  2. バンドル ID をスキーマの末尾に追加します。 次のパターンに従います。

    $"msauth.(BundleId)"

    ここでは、BundleId によってデバイスが一意に識別されます。 たとえば、BundleIdyourcompany.xforms の場合、URL スキームは msauth.com.yourcompany.xforms になります。

    この URL スキームは、ブローカーから応答を受け取るときにアプリを一意に識別するリダイレクト URI の一部になります。 msauth.(BundleId)://auth 形式のリダイレクト URI がアプリケーションに対して登録されていることを確認してください。

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>msauth.[BUNDLE_ID]</string>
            </array>
        </dict>
    </array>
    

手順 3:LSApplicationQueriesSchemes を追加する

Microsoft Authenticator アプリがインストールされている場合にその呼び出しを許可するために、LSApplicationQueriesSchemes を追加します。

注意

アプリが Xcode 11 以降を使用してコンパイルされている場合は、msauthv3 スキームが必要です。

LSApplicationQueriesSchemes を追加する方法の例を次に示します。

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

Xamarin.Android でのブローカー認証

Android でブローカーを有効にする方法の詳細については、Xamarin.Android のブローカー認証に関する記事を参照してください。

次のステップ

このシナリオの次のトークンを取得するに関する記事に進みます。