クイックスタート: Microsoft ID プラットフォームによって保護されている ASP.NET Web API を呼び出す
次のクイックスタートでは、リソースへのアクセスを認可されたアカウントだけに制限して、ASP.NET Web API を保護する方法を示すコード サンプルを使います。 このサンプルでは、個人用 Microsoft アカウントと Microsoft Entra 組織のアカウントの承認がサポートされています。
また、この記事では、Windows Presentation Foundation (WPF) アプリを使って、Web API にアクセスするためのアクセス トークンを要求するデモンストレーションを行います。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Visual Studio 2022。 Visual Studio を無料でダウンロードします。
サンプルをクローンまたはダウンロードする
コード サンプルは次の 2 つの方法で取得できます。
シェルまたはコマンド ラインからクローンする
git clone https://github.com/AzureADQuickStarts/AppModelv2-NativeClient-DotNet.git
ヒント
Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。
Web API を登録する (TodoListService)
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
Azure portal の [アプリの登録] で Web API を登録します。
クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
[ID]>[アプリケーション]>[アプリの登録] に移動し、[新規登録] を選びます。
アプリケーションの名前を入力します (例:
AppModelv2-NativeClient-DotNet-TodoListService
)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。[サポートされているアカウントの種類] で、 [任意の組織のディレクトリ内のアカウント] を選択します。
[登録] を選択して、アプリケーションを作成します。
アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 これは、このプロジェクトの Visual Studio 構成ファイルを構成するために必要になります (つまり、TodoListService\appsettings.json ファイルの
ClientId
)。[管理] で、 [API の公開]>[スコープの追加] の順に選択します。 [保存して続行] を選択して、提案されたアプリケーション ID URI (
api://{clientId}
) を受け入れ、次の情報を入力します。- [スコープ名] に「
access_as_user
」と入力します。 - [同意できるユーザー] で [管理者とユーザー] オプションが選択されていることを確認します。
- [管理者の同意の表示名] ボックスには、「
Access TodoListService as a user
」と入力します。 - [管理者の同意の説明] ボックスには、「
Accesses the TodoListService web API as a user
」と入力します。 - [ユーザーの同意の表示名] ボックスには、「
Access TodoListService as a user
」と入力します。 - [ユーザーの同意の説明] ボックスには、「
Accesses the TodoListService web API as a user
」と入力します。 - [状態] は [有効] のままにします。
- [スコープ名] に「
[スコープの追加] を選択します。
サービス プロジェクトを構成する
登録されている Web API に一致するようにサービス プロジェクトを構成します。
Visual Studio でソリューションを開き、TodoListService プロジェクトのルートの下にある appsettings.json ファイルを開きます。
ClientID
およびAudience
の両方のプロパティで、Enter_the_Application_Id_here
の値をアプリの登録ポータルで登録したアプリケーションのクライアント ID (アプリケーション ID) に置き換えます。
新しいスコープを app.config ファイルに追加する
新しいスコープを TodoListClient app.config ファイルに追加するには、これらの手順を実行します。
TodoListClient プロジェクトのルート フォルダーで app.config ファイルを開きます。
TodoListServiceScope
パラメーターで TodoListService プロジェクトに登録したアプリケーションのアプリケーション ID を貼り付け、{Enter the Application ID of your TodoListService from the app registration portal}
文字列を置き換えます。
注意
アプリケーション ID の形式が api://{TodoListService-Application-ID}/access_as_user
になっていることを確認してください ({TodoListService-Application-ID}
は TodoListService アプリのアプリケーション ID を表す GUID です)。
Web アプリを登録する (TodoListClient)
Azure portal のアプリの登録で TodoListClient アプリを登録し、TodoListClient プロジェクトでコードを設定します。 クライアントとサーバーが同じアプリケーションと見なされる場合は、手順 2 で登録したアプリケーションを再利用できます。 ユーザーが個人用 Microsoft アカウントでサインインできるようにするには、同じアプリケーションを使用します。
アプリを登録する
TodoListClient アプリを登録するには、これらの手順に従います。
クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
[ID]>[アプリケーション]>[アプリの登録] に移動し、[新規登録] を選びます。
[新規登録] を選択します。
[アプリケーションの登録] ページが表示されたら、以下のアプリケーションの登録情報を入力します。
- [名前] セクションに、アプリのユーザーに表示されるわかりやすいアプリケーション名を入力します (例: NativeClient-DotNet-TodoListClient)。
- [サポートされているアカウントの種類] で、 [任意の組織のディレクトリ内のアカウント] を選択します。
- [登録] を選択して、アプリケーションを作成します。
注意
TodoListClient プロジェクトの app.config ファイルで、
ida:Tenant
の既定値はcommon
に設定されています。 次の値を指定できます。common
: 職場または学校アカウントを使用するか、個人用 Microsoft アカウントを使用してサインインできます (前の手順で [任意の組織のディレクトリ内のアカウント] を選択したため)。organizations
:職場または学校アカウントを使用してサインインできます。consumers
:Microsoft の個人用アカウントを使用してのみサインインできます。
アプリの概要ページで [認証] を選択し、これらの手順を実行してプラットフォームを追加します。
- [プラットフォーム構成] で [プラットフォームを追加] ボタンを選択します。
- [モバイル アプリケーションとデスクトップ アプリケーション] で、 [モバイル アプリケーションとデスクトップ アプリケーション] を選択します。
- [リダイレクト URI] で、
https://login.microsoftonline.com/common/oauth2/nativeclient
のチェック ボックスをオンにします。 - [構成] をクリックします。
[API のアクセス許可] を選択し、これらの手順を実行してアクセス許可を追加します。
- [アクセス許可の追加] ボタンを選択します。
- [自分の API] タブを選択します。
- API のリストで [AppModelv2-NativeClient-DotNet-TodoListService API] または Web API に入力した名前を選択します。
- まだ選択していない場合は、access_as_user アクセス許可のチェック ボックスをオンにします。 必要に応じて検索ボックスを使用します。
- [アクセス許可の追加] ボタンを選択します
プロジェクトを構成する
アプリケーション ID を app.config ファイルに追加して、TodoListClient プロジェクトを構成します。
アプリの登録ポータルの [概要] ページで、 [アプリケーション (クライアント) ID] の値をコピーします。
TodoListClient プロジェクトのルート フォルダーで app.config ファイルを開き、アプリケーション ID の値を
ida:ClientId
パラメーターに貼り付けます。
プロジェクトの実行
両方のプロジェクトを開始します。 Visual Studio ユーザーの場合は次のとおりです。
Visual Studio ソリューションを右クリックし、[プロパティ] を選択します。
[共通プロパティ] で、[スタートアップ プロジェクト]、[マルチ スタートアップ プロジェクト] の順に選択します。
両方のプロジェクトに対して、アクションとして [Start](開始) を選択します。
上向きの矢印を使用して TodoListService サービスを一覧の最初の位置に移動し、最初に開始されるようにします。
TodoListClient プロジェクトにサインインして実行します。
F5 キーを押して、プロジェクトを開始します。 サービスのページと、デスクトップ アプリケーションが開きます。
TodoListClient の右上にある [サインイン] を選択し、アプリケーションの登録に使用したのと同じ資格情報でサインインするか、同じディレクトリ内のユーザーとしてサインインします。
初めてサインインする場合は、TodoListService Web API に同意するように求められることがあります。
TodoListService Web API にアクセスし、To-Do リストを操作できるようにするために、このサインインでは access_as_user スコープへのアクセス トークンも要求されます。
クライアント アプリケーションを事前承認する
Web API にアクセスするクライアント アプリケーションを事前承認することで、他のディレクトリのユーザーに Web API へのアクセスを許可することができます。 これを行うには、クライアント アプリからのアプリケーション ID を Web API の事前承認済みアプリケーションのリストに追加します。 事前承認されたクライアントを追加すると、ユーザーは同意しなくても Web API にアクセスできるようになります。
- アプリの登録ポータルで、TodoListService アプリのプロパティを開きます。
- [API の公開] セクションの [承認済みのクライアント アプリケーション] で [クライアント アプリケーションの追加] を選択します。
- [クライアント ID] ボックスに、TodoListClient アプリのアプリケーション ID を貼り付けます。
- [承認済みのスコープ] セクションで、
api://<Application ID>/access_as_user
Web API のスコープを選択します。 - [アプリケーションの追加] をクリックします。
プロジェクトを実行する
- F5 キーを押してプロジェクトを実行します。 TodoListClient アプリが開きます。
- 右上にある [サインイン] を選択して、live.com、hotmail.com などの Microsoft の個人用アカウント、または職場または学校アカウントを使用してサインインします。
省略可能:サインイン アクセスを特定のユーザーに制限する
既定では、outlook.com、live.com などの個人用アカウント、または Microsoft Entra ID に統合されている組織の職場または学校アカウントはすべて、トークンを要求したり、Web API にアクセスしたりできます。
アプリケーションにサインインできるユーザーを指定するには、appsettings.json ファイルの TenantId
プロパティを変更します。
ヘルプとサポート
サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。
次のステップ
以下のチュートリアル シリーズで、保護された ASP.NET Core Web API をビルドして詳細を学習する: