MSAL.NET を使用してクライアント アプリケーションを初期化する

この記事では、.NET (MSAL.NET) のMicrosoft Authentication Libraryを使用してパブリック クライアント アプリケーションと機密クライアント アプリケーションを初期化する方法について説明します。 クライアント アプリケーションの種類の詳細については、 パブリック クライアント アプリケーションと機密クライアント アプリケーションに関するページを参照してください。

MSAL.NET 3.x では、アプリケーションビルダー (PublicClientApplicationBuilderConfidentialClientApplicationBuilder) を使用してアプリケーションをインスタンス化することをお勧めします。 コード、構成ファイル、または両方の方法を混在させることで、アプリケーションを構成するための強力なメカニズムを提供します。

Prerequisites

アプリケーションを初期化する前に、まずアプリケーションを登録して、アプリをMicrosoft ID プラットフォームと統合できるようにする必要があります。 詳細については、「クイック スタート: Microsoft ID プラットフォームにアプリケーションを登録する」を参照してください。 登録後、次の情報が必要になります。この情報は、Microsoft Entra 管理センターのアプリ登録ページにあります。

  • アプリケーション (クライアント) ID - GUID を表す文字列です。
  • ディレクトリ (テナント) ID - 組織で使用されるアプリケーションとリソースに ID とアクセス管理 (IAM) 機能を提供します。 組織専用の基幹業務アプリケーション (シングルテナント アプリケーションとも呼ばれます) を作成するかどうかを指定できます。
  • アプリケーションの ID プロバイダー URL ( インスタンスという名前) とサインイン対象ユーザー。 これら 2 つのパラメーターは、総称して機関と呼ばれます。
  • クライアント資格情報 - 機密クライアント アプリの場合は、アプリケーション シークレット (クライアント シークレット文字列) または証明書 ( X509Certificate2 型) の形式を使用できます。
  • Web アプリの場合や、パブリック クライアント アプリの場合 (特にアプリでブローカーを使用する必要がある場合)、ID プロバイダーがセキュリティ トークンを使用してアプリケーションに連絡する リダイレクト URI を 設定する必要があります。

アプリケーションの初期化

クライアント アプリケーションをインスタンス化するには、さまざまな方法があります。

コードからのパブリック クライアント アプリケーションの初期化

次のコードでは、パブリック クライアント アプリケーションをインスタンス化し、職場、学校、または個人のMicrosoft アカウントを使用して、Microsoft Azureパブリック クラウド内のユーザーをサインインします。

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

コードからの機密クライアント アプリケーションの初期化

同様に、次のコードは、Microsoft Azureパブリック クラウド内のユーザー、職場と学校のアカウント、または個人のMicrosoft アカウントを使用してトークンを処理する機密アプリケーション (https://myapp.azurewebsites.netにある Web アプリ) をインスタンス化します。 アプリケーションは、クライアント シークレットを共有することによって ID プロバイダーと識別されます。

string redirectUri = "https://myapp.azurewebsites.net";
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
    .WithClientSecret(clientSecret)
    .WithRedirectUri(redirectUri )
    .Build();

ただし、運用環境では、証明書はクライアント シークレットよりも安全であるため、推奨されます。 作成してMicrosoft Entra 管理センターにアップロードできます。 その後、コードは次のようになります。

IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
    .WithCertificate(certificate)
    .WithRedirectUri(redirectUri )
    .Build();

構成オプションからのパブリック クライアント アプリケーションの初期化

次のコードは、構成オブジェクトからパブリック クライアント アプリケーションをインスタンス化します。構成オブジェクトは、プログラムで入力することも、構成ファイルから読み取る場合もあります。

PublicClientApplicationOptions options = GetOptions(); // your own method
IPublicClientApplication app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
    .Build();

構成オプションからの機密クライアント アプリケーションの初期化

機密クライアント アプリケーションにも同じ種類のパターンが適用されます。 .WithXXX修飾子を使用して他のパラメーターを追加することもできます。 この例では、 .WithCertificateを使用します。

ConfidentialClientApplicationOptions options = GetOptions(); // your own method
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(options)
    .WithCertificate(certificate)
    .Build();

ビルダー修飾子

アプリケーション ビルダーを使用するコード スニペットでは、多くの .With メソッドを修飾子 ( .WithCertificate.WithRedirectUriなど) として適用できます。

パブリック クライアント アプリケーションと機密クライアント アプリケーションに共通する修飾子

パブリック クライアントまたは機密クライアント アプリケーション ビルダーで設定できる修飾子は、 AbstractApplicationBuilder<T> クラスにあります。 さまざまな方法については、.NETドキュメントのAzure SDKを参照してください

Xamarin.iOS アプリケーションに固有の修飾子

Xamarin.iOS のパブリック クライアント アプリケーション ビルダーで設定できる修飾子は次のとおりです。

修飾子 説明
.WithIosKeychainSecurityGroup() Xamarin.iOS のみ: iOS キー チェーン セキュリティ グループ (キャッシュ永続化用) を設定します。

機密クライアント アプリケーションに固有の修飾子

機密クライアント アプリケーション ビルダーに固有の修飾子は、 ConfidentialClientApplicationBuilder クラスにあります。 さまざまな方法については、.NETドキュメントのAzure SDKを参照してください

.WithCertificate(X509Certificate2 certificate).WithClientSecret(string clientSecret)などの修飾子は相互に排他的です。 両方を指定すると、MSAL は意味のある例外をスローします。

修飾子の使用例

アプリケーションが基幹業務アプリケーションであり、組織専用であるとします。 その後、次のように記述できます。

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, tenantId)
        .Build();

国内クラウドのプログラミングが簡素化されたため、アプリケーションを国内クラウドのマルチテナント アプリケーションにする場合は、次のように記述できます。

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithAuthority(AzureCloudInstance.AzureUsGovernment, AadAuthorityAudience.AzureAdMultipleOrgs)
        .Build();

ADFS のオーバーライドもあります (MSAL.NET は ADFS 2019 以降のみをサポートします)。

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithAdfsAuthority("https://consoso.com/adfs")
        .Build();

最後に、AZURE AD B2C 開発者の場合は、次のようにテナントを指定できます。

IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
        .WithB2CAuthority("https://fabrikamb2c.b2clogin.com/tfp/{tenant}/{PolicySignInSignUp}")
        .Build();

こちらも参照ください

API リファレンス ドキュメント

NuGet 上のパッケージ

ライブラリのソース コード

コード サンプル

次のステップ

クライアント アプリケーションを初期化したら、次のタスクは、ユーザー サインイン、承認された API アクセス、またはその両方のサポートを追加することです。

アプリケーション シナリオのドキュメントでは、ユーザーのサインインと、そのユーザーの代わりに API にアクセスするためのアクセス トークンの取得に関するガイダンスを提供します。