クイックスタート: Microsoft ID プラットフォームによって保護されている ASP.NET Web API を呼び出す

次のクイックスタートでは、リソースへのアクセスを認可されたアカウントだけに制限して、ASP.NET Web API を保護する方法を示すコード サンプルを使います。 このサンプルでは、個人用 Microsoft アカウントと Microsoft Entra 組織のアカウントの承認がサポートされています。

また、この記事では、Windows Presentation Foundation (WPF) アプリを使って、Web API にアクセスするためのアクセス トークンを要求するデモンストレーションを行います。

前提条件

サンプルをクローンまたはダウンロードする

コード サンプルは次の 2 つの方法で取得できます。

ヒント

Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。

Web API を登録する (TodoListService)

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

Azure portal の [アプリの登録] で Web API を登録します。

  1. クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。

  2. 複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。

  3. [ID]>[アプリケーション]>[アプリの登録] に移動し、[新規登録] を選びます。

  4. アプリケーションの名前を入力します (例: AppModelv2-NativeClient-DotNet-TodoListService)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。

  5. [サポートされているアカウントの種類] で、 [任意の組織のディレクトリ内のアカウント] を選択します。

  6. [登録] を選択して、アプリケーションを作成します。

  7. アプリの [概要] ページで、 [アプリケーション (クライアント) ID] の値を探し、後で使用するために記録します。 これは、このプロジェクトの Visual Studio 構成ファイルを構成するために必要になります (つまり、TodoListService\appsettings.json ファイルの ClientId)。

  8. [管理] で、 [API の公開]>[スコープの追加] の順に選択します。 [保存して続行] を選択して、提案されたアプリケーション ID URI (api://{clientId}) を受け入れ、次の情報を入力します。

    1. [スコープ名] に「access_as_user」と入力します。
    2. [同意できるユーザー][管理者とユーザー] オプションが選択されていることを確認します。
    3. [管理者の同意の表示名] ボックスには、「Access TodoListService as a user」と入力します。
    4. [管理者の同意の説明] ボックスには、「Accesses the TodoListService web API as a user」と入力します。
    5. [ユーザーの同意の表示名] ボックスには、「Access TodoListService as a user」と入力します。
    6. [ユーザーの同意の説明] ボックスには、「Accesses the TodoListService web API as a user」と入力します。
    7. [状態][有効] のままにします。
  9. [スコープの追加] を選択します。

サービス プロジェクトを構成する

登録されている Web API に一致するようにサービス プロジェクトを構成します。

  1. Visual Studio でソリューションを開き、TodoListService プロジェクトのルートの下にある appsettings.json ファイルを開きます。

  2. ClientID および Audience の両方のプロパティで、Enter_the_Application_Id_here の値をアプリの登録ポータルで登録したアプリケーションのクライアント ID (アプリケーション ID) に置き換えます。

新しいスコープを app.config ファイルに追加する

新しいスコープを TodoListClient app.config ファイルに追加するには、これらの手順を実行します。

  1. TodoListClient プロジェクトのルート フォルダーで app.config ファイルを開きます。

  2. 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 アプリを登録するには、これらの手順に従います。

  1. クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。

  2. [ID]>[アプリケーション]>[アプリの登録] に移動し、[新規登録] を選びます。

  3. [新規登録] を選択します。

  4. [アプリケーションの登録] ページが表示されたら、以下のアプリケーションの登録情報を入力します。

    1. [名前] セクションに、アプリのユーザーに表示されるわかりやすいアプリケーション名を入力します (例: NativeClient-DotNet-TodoListClient)。
    2. [サポートされているアカウントの種類] で、 [任意の組織のディレクトリ内のアカウント] を選択します。
    3. [登録] を選択して、アプリケーションを作成します。

    注意

    TodoListClient プロジェクトの app.config ファイルで、ida:Tenant の既定値は common に設定されています。 次の値を指定できます。

    • common: 職場または学校アカウントを使用するか、個人用 Microsoft アカウントを使用してサインインできます (前の手順で [任意の組織のディレクトリ内のアカウント] を選択したため)。
    • organizations:職場または学校アカウントを使用してサインインできます。
    • consumers:Microsoft の個人用アカウントを使用してのみサインインできます。
  5. アプリの概要ページで [認証] を選択し、これらの手順を実行してプラットフォームを追加します。

    1. [プラットフォーム構成][プラットフォームを追加] ボタンを選択します。
    2. [モバイル アプリケーションとデスクトップ アプリケーション] で、 [モバイル アプリケーションとデスクトップ アプリケーション] を選択します。
    3. [リダイレクト URI] で、 https://login.microsoftonline.com/common/oauth2/nativeclient のチェック ボックスをオンにします。
    4. [構成] をクリックします。
  6. [API のアクセス許可] を選択し、これらの手順を実行してアクセス許可を追加します。

    1. [アクセス許可の追加] ボタンを選択します。
    2. [自分の API] タブを選択します。
    3. API のリストで [AppModelv2-NativeClient-DotNet-TodoListService API] または Web API に入力した名前を選択します。
    4. まだ選択していない場合は、access_as_user アクセス許可のチェック ボックスをオンにします。 必要に応じて検索ボックスを使用します。
    5. [アクセス許可の追加] ボタンを選択します

プロジェクトを構成する

アプリケーション ID を app.config ファイルに追加して、TodoListClient プロジェクトを構成します。

  1. アプリの登録ポータルの [概要] ページで、 [アプリケーション (クライアント) ID] の値をコピーします。

  2. TodoListClient プロジェクトのルート フォルダーで app.config ファイルを開き、アプリケーション ID の値を ida:ClientId パラメーターに貼り付けます。

プロジェクトの実行

両方のプロジェクトを開始します。 Visual Studio ユーザーの場合は次のとおりです。

  1. Visual Studio ソリューションを右クリックし、[プロパティ] を選択します。

  2. [共通プロパティ] で、[スタートアップ プロジェクト][マルチ スタートアップ プロジェクト] の順に選択します。

  3. 両方のプロジェクトに対して、アクションとして [Start](開始) を選択します。

  4. 上向きの矢印を使用して TodoListService サービスを一覧の最初の位置に移動し、最初に開始されるようにします。

TodoListClient プロジェクトにサインインして実行します。

  1. F5 キーを押して、プロジェクトを開始します。 サービスのページと、デスクトップ アプリケーションが開きます。

  2. TodoListClient の右上にある [サインイン] を選択し、アプリケーションの登録に使用したのと同じ資格情報でサインインするか、同じディレクトリ内のユーザーとしてサインインします。

    初めてサインインする場合は、TodoListService Web API に同意するように求められることがあります。

    TodoListService Web API にアクセスし、To-Do リストを操作できるようにするために、このサインインでは access_as_user スコープへのアクセス トークンも要求されます。

クライアント アプリケーションを事前承認する

Web API にアクセスするクライアント アプリケーションを事前承認することで、他のディレクトリのユーザーに Web API へのアクセスを許可することができます。 これを行うには、クライアント アプリからのアプリケーション ID を Web API の事前承認済みアプリケーションのリストに追加します。 事前承認されたクライアントを追加すると、ユーザーは同意しなくても Web API にアクセスできるようになります。

  1. アプリの登録ポータルで、TodoListService アプリのプロパティを開きます。
  2. [API の公開] セクションの [承認済みのクライアント アプリケーション][クライアント アプリケーションの追加] を選択します。
  3. [クライアント ID] ボックスに、TodoListClient アプリのアプリケーション ID を貼り付けます。
  4. [承認済みのスコープ] セクションで、api://<Application ID>/access_as_user Web API のスコープを選択します。
  5. [アプリケーションの追加] をクリックします。

プロジェクトを実行する

  1. F5 キーを押してプロジェクトを実行します。 TodoListClient アプリが開きます。
  2. 右上にある [サインイン] を選択して、live.comhotmail.com などの Microsoft の個人用アカウント、または職場または学校アカウントを使用してサインインします。

省略可能:サインイン アクセスを特定のユーザーに制限する

既定では、outlook.comlive.com などの個人用アカウント、または Microsoft Entra ID に統合されている組織の職場または学校アカウントはすべて、トークンを要求したり、Web API にアクセスしたりできます。

アプリケーションにサインインできるユーザーを指定するには、appsettings.json ファイルの TenantId プロパティを変更します。

ヘルプとサポート

サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。

次のステップ

以下のチュートリアル シリーズで、保護された ASP.NET Core Web API をビルドして詳細を学習する: