この記事では、.NET (MSAL.NET) のMicrosoft Authentication Libraryを使用してパブリック クライアント アプリケーションと機密クライアント アプリケーションを初期化する方法について説明します。 クライアント アプリケーションの種類の詳細については、 パブリック クライアント アプリケーションと機密クライアント アプリケーションに関するページを参照してください。
MSAL.NET 3.x では、アプリケーションビルダー (PublicClientApplicationBuilderとConfidentialClientApplicationBuilder) を使用してアプリケーションをインスタンス化することをお勧めします。 コード、構成ファイル、または両方の方法を混在させることで、アプリケーションを構成するための強力なメカニズムを提供します。
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 アクセス、またはその両方のサポートを追加することです。
アプリケーション シナリオのドキュメントでは、ユーザーのサインインと、そのユーザーの代わりに API にアクセスするためのアクセス トークンの取得に関するガイダンスを提供します。