クイックスタート:Microsoft ID プラットフォームを使用して ASP.NET Core Web API を保護する
このクイックスタートでは、ASP.NET Core Web API コード サンプルを使って、リソースへのアクセスを承認されたアカウントに制限する方法を示します。 このサンプルでは、Microsoft Authentication Library (MSAL) とやり取りして認証を処理する ASP.NET Core Identity を使います。
前提条件
- アクティブなサブスクリプションを使う Azure アカウント。 まだお持ちでない場合は、無料のアカウント*を作成してください。
- .NET 8.0 SDK の最小要件
- Visual Studio 2022 または Visual Studio Code
アプリケーションとレコードの識別子を登録する
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
登録を完了するには、アプリケーションに名前を指定し、サポートされているアカウントの種類を指定します。 登録すると、アプリケーションの [概要] ページに、アプリケーションのソース コードに必要な識別子が表示されます。
アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
[ID]>[アプリケーション]>[アプリの登録] を参照します。
[新規登録] を選択します。
アプリケーションの名前 (NewWebAPI1 など) を入力します。
[サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。 さまざまなアカウントの種類については、[選択に関するヘルプ] オプションを選択します。
[登録] を選択します。
アプリケーションの [概要] ペインは、登録が完了すると表示されます。 アプリケーションのソース コードで使用するディレクトリ (テナント) ID とアプリケーション (クライアント) ID を記録します。
注意
サポートされているアカウントの種類は、「アプリケーションによってサポートされるアカウントを変更する」を参照して変更することができます。
API の公開
API が登録されると、API がクライアント アプリケーションに公開するスコープを定義することで、そのアクセス許可を構成することができます。 クライアント アプリケーションは、アクセス トークンとその要求を保護された Web API に渡すことで、操作を実行するためのアクセス許可を要求します。 そして Web API は、受け取ったアクセス トークンに必要なスコープが含まれている場合のみ、要求された操作を実行します。
[管理] で、[API の公開] > [スコープの追加] の順に選択します。 [保存してから続行] を選択することで、提案されたアプリケーション ID URI
(api://{clientId})
を受け入れます。{clientId}
は、[概要] ページから記録した値です。 そして、次の情報を入力します。- [スコープ名] に「
Forecast.Read
」と入力します。 - [同意できるユーザー] で [管理者とユーザー] オプションが選択されていることを確認します。
- [管理者の同意の表示名] ボックスには、「
Read forecast data
」と入力します。 - [管理者の同意の説明] ボックスには、「
Allows the application to read weather forecast data
」と入力します。 - [ユーザーの同意の表示名] ボックスには、「
Read forecast data
」と入力します。 - [ユーザーの同意の説明] ボックスには、「
Allows the application to read weather forecast data
」と入力します。 - [状態] が [有効] に設定されていることを確認します。
- [スコープ名] に「
[スコープの追加] を選択します。 スコープが正しく入力されている場合は、[API の公開] ペインに一覧表示されます。
サンプル アプリケーションをクローンまたはダウンロードする
サンプル アプリケーションを取得するには、GitHub から複製するか、.zip ファイルとしてダウンロードします。
サンプルをクローンするには、コマンド プロンプトを開き、プロジェクトを作成する場所に移動し、次のコマンドを入力します。
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
.zip ファイルをダウンロードします。 名前の長さが 260 文字未満のファイル パスに抽出します。
ASP.NET Core サンプル アプリケーションを構成する
IDE で、サンプルが含まれているプロジェクト フォルダー ms-identity-docs-code-dotnet/web-api を開きます。
次のコード スニペットを含む
appsettings.json
ファイルを開きます。{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center", "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center", "Scopes": "Forecast.Read" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
次の
key
を見つけます。ClientId
- クライアントとも呼ばれる、アプリケーションの識別子。 引用符で囲まれたvalue
テキストを、登録したアプリケーションの [概要] ページから先ほど記録したアプリケーション (クライアント) ID に置き換えます。TenantId
- アプリケーションが登録されているテナントの識別子。 引用符で囲まれたvalue
テキストを、登録したアプリケーションの [概要] ページから先ほど記録したディレクトリ (テナント) ID の値に置き換えます。
サンプル アプリケーションの実行
次のコマンドを実行して、アプリを起動します。
dotnet run
次のサンプルのような出力が表示されます。
... info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:{port} ...
ポート番号を
http://localhost:{port}
URL に記録します。エンドポイントが保護されていることを確認するには、次の cURL コマンドのベース URL を、前の手順で受信した URL と一致するように更新し、コマンドを実行します。
curl -X GET https://localhost:5001/weatherforecast -ki
予期される応答は 401 Unauthorized で、出力は次のようになります。
user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki HTTP/2 401 date: Fri, 23 Sep 2023 23:34:24 GMT server: Kestrel www-authenticate: Bearer content-length: 0
次のステップ
cURL を使用して保護された Web API を呼び出す方法については、次の記事に進んでください。