クイック スタート:Microsoft ID プラットフォームによって保護されている ASP.NET Web API を呼び出す
ようこそ。 ご要望のページを表示できません。 問題の修正に取り組んでいますが、次のリンクから目的の記事にアクセスできるかお試しください。
ご不便をおかけして申し訳ありませんが、問題が解決するまで今しばらくお待ちください。
このクイックスタートでは、リソースへのアクセスを承認されたアカウントだけに制限して、ASP.NET Web API を保護する方法を示すコード サンプルをダウンロードして実行します。 このサンプルでは、個人用 Microsoft アカウントと Microsoft Entra 組織のアカウントの承認がサポートされています。
また、この記事では、Windows Presentation Foundation (WPF) アプリを使用して、Web API にアクセスするためのアクセス トークンを要求するデモンストレーションを行います。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Visual Studio 2017 または 2019。 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\Web.config ファイルの
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 プロジェクトのルートの下にある Web.config ファイルを開きます。
ida:ClientId
パラメーターの値を、アプリの登録ポータルで登録したアプリケーションのクライアント 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 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 にアクセスしたりできます。
アプリケーションにサインインできるユーザーを指定するには、次のいずれかのオプションを使用します。
オプション 1: 単一の組織へのアクセスを制限する (シングル テナント)
単一の Microsoft Entra テナントに属するユーザー アカウント (そのテナントのゲスト アカウントを含む) に、アプリケーションへのサインイン アクセスを制限できます。 このシナリオは、基幹業務アプリケーションに共通です。
- App_Start\Startup.Auth ファイルを開き、
OpenIdConnectSecurityTokenProvider
に渡されたメタデータの値をhttps://login.microsoftonline.com/{Tenant ID}/v2.0/.well-known/openid-configuration
に変更します。contoso.onmicrosoft.com
などのテナント名を使用することもできます。 - 同じファイルで、
TokenValidationParameters
のValidIssuer
プロパティをhttps://sts.windows.net/{Tenant ID}/
に設定し、ValidateIssuer
引数をtrue
に設定します。
オプション 2:カスタム メソッドを使用して発行者を検証する
IssuerValidator
パラメーターを使用して、カスタム メソッドを実装して発行者を検証できます。 このパラメーターの詳細については、TokenValidationParameters クラスに関するページを参照してください。
ヘルプとサポート
サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。
次のステップ
以下のチュートリアル シリーズで、保護された ASP.NET Core Web API をビルドして詳細を学習する: