トレーニング
認定資格
Microsoft Certified: Azure Developer Associate - Certifications
Azure Functions の作成、Web アプリの実装と管理、Azure ストレージを利用したソリューションの開発などを行うために、Microsoft Azure でエンド ツー エンドのソリューションを構築します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
この記事では、Client URL (cURL) を使用して保護された ASP.NET Core の Web API を呼び出す方法について説明します。 cURLは、開発者がサーバーとの間でデータを転送するために使用するコマンド ライン ツールです。 この記事では、テナントで Web アプリと Web API を登録します。 Web アプリは、Microsoft ID プラットフォームによって生成されたアクセス トークンを取得するために使用します。 次にこのトークンを使って、cURL を使用して Web API に承認された呼び出しを行います。
この記事では、Client URL (cURL) を使用して保護された ASP.NET Core の Web API を呼び出す方法について説明します。 cURLは、開発者がサーバーとの間でデータを転送するために使用するコマンド ライン ツールです。 「チュートリアル: API に保護されたエンドポイントを実装する」では保護された API を作成しましたが、その後に Web アプリケーションを Microsoft ID プラットフォームに登録してアクセス トークンを生成する必要があります。 次にこのトークンを使って、cURL を使用して API に承認された呼び出しを行います。
Microsoft ID プラットフォームでは、ID およびアクセス管理サービスを利用する前に、アプリケーションを登録する必要があります。 アプリケーションの登録では、アプリケーションの名前と種類とサインイン対象ユーザーを指定できます。 サインイン対象ユーザーは、特定のアプリケーションにサインインできるユーザー アカウントの種類を指定します。
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
Web API の登録を作成するには、次の手順のようにします。
アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合は、上部のメニューの [設定] アイコン を使い、[ディレクトリとサブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。
[ID]>[アプリケーション]>[アプリの登録] を参照します。
[新規登録] を選択します。
アプリケーションの名前 (NewWebAPI1 など) を入力します。
[サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。 さまざまなアカウントの種類については、[選択に関するヘルプ] オプションを選択します。
[登録] を選択します。
アプリケーションの [概要] ペインは、登録が完了すると表示されます。 アプリケーションのソース コードで使用するディレクトリ (テナント) ID とアプリケーション (クライアント) ID を記録します。
注意
サポートされているアカウントの種類は、「アプリケーションによってサポートされるアカウントを変更する」を参照して変更することができます。
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 の公開] ペインに一覧表示されます。
ただし、Web API があるだけでは不十分で、作成した Web API にアクセスするためのアクセス トークンを取得する Web アプリも必要です。
Web アプリの登録を作成するには、次の手順のようにします。
web-app-calls-web-api
など) を入力します。http://localhost
」と入力します。web-app-calls-web-api
など) を入力します。http://localhost
」と入力します。登録が完了すると、アプリの登録が [概要] ペインに表示されます。 ディレクトリ (テナント) ID とアプリケーション (クライアント) ID は、後の手順で使用するので記録しておきます。
クライアント シークレットは、アプリが自分自身を識別するために使用できる文字列値であり、" アプリケーション パスワード"と呼ばれることもあります。 Web アプリは、トークンを要求するときに、このクライアント シークレットを使用してその ID を証明します。
次の手順に従って、クライアント シークレットを構成します。
[概要] ペインの [管理] で、[証明書とシークレット]>[クライアント シークレット]>[新しいクライアント シークレット] の順に選択します。
クライアント シークレットの説明 (例: 自分のクライアント シークレット) を追加します。
シークレットの有効期限を選択するか、カスタムの有効期間を指定します。
[追加] を選択します。
クライアント シークレットの値は必ず記録しておいてください。 このページからの移動後は、このシークレットの値は "二度と表示されません"。
Web アプリの登録で Web API のスコープを指定することにより、Web アプリは Microsoft ID プラットフォームが提供するスコープを含むアクセス トークンを取得することができます。 次にコード内で、Web API はアクセス トークンに含まれるスコープに基づいて、リソースに対するアクセス許可ベースのアクセスを提供することができます。
次の手順に従って、Web API に対する Web アプリのアクセス許可を構成します。
これらのアクセス許可をご自身の API に追加した後、選択したアクセス許可が [構成されたアクセス許可] に表示されます。
Microsoft Graph API に対する User.Read アクセス許可も表示されています。 このアクセス許可は、アプリを登録すると自動的に追加されます。
ms-identity-docs-code-dotnet リポジトリを複製します。
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
ms-identity-docs-code-dotnet/web-api
フォルダーに移動し、./appsettings.json
ファイルを開き、{APPLICATION_CLIENT_ID}
と {DIRECTORY_TENANT_ID}
を以下のように置き換えます。
{APPLICATION_CLIENT_ID}
は、アプリの [概要] ペインの [アプリの登録] にある Web API アプリケーション (クライアント) ID です。{DIRECTORY_TENANT_ID}
は、アプリの [概要] ペインの [アプリの登録] にある Web API ディレクトリ (テナント) ID です。次のコマンドを実行して、アプリを起動します。
次のような出力が表示されます。 ポート番号を https://localhost:{port}
URL に記録します。
...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:{port}
...
「チュートリアル: ASP.NET Core プロジェクトを作成し、API を構成する」で作成した Web API (たとえば NewWebAPILocal) に移動し、フォルダーを開きます。
新しいターミナル ウィンドウを開き、Web API プロジェクトが置いてあるフォルダーに移動します。
次のような出力が表示されます。 ポート番号を https://localhost:{port}
URL に記録します。
...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:{port}
...
承認コード フローは、クライアントがユーザーを /authorize
エンドポイントにリダイレクトさせることから始まります。 この要求では、クライアントは、ユーザーからの Forecast.Read
のアクセス許可を要求します。
https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?client_id={web-app-calls-web-api_application_client_id}&response_type=code&redirect_uri=http://localhost&response_mode=query&scope=api://{web_API_application_client_id}/Forecast.Read
URL をコピーし、次のパラメーターを置き換えてブラウザーに貼り付けます。
{tenant_id}
は Web アプリ Directory (tenant) ID です。{web-app-calls-web-api_application_client_id}
は、Web アプリの (web-app-calls-web-api) [概要] ペインのアプリケーション (クライアント) ID です。{web_API_application_client_id}
は、Web API の (NewWebAPI1) [概要] ペインのアプリケーション (クライアント) ID です。アプリが登録されている Microsoft Entra テナントでユーザーとしてサインインします。 必要に応じて、アクセス時に求められる事項に同意します。
ブラウザーが http://localhost/
にリダイレクトされます。 ブラウザーのナビゲーション バーを参照し、次の手順で使用する {authorization_code}
をコピーします。 URL は、次のスニペットの形式になります。
http://localhost/?code={authorization_code}
cURL を使用して、Microsoft ID プラットフォームからアクセス トークンを要求できるようになりました。
次のスニペットで cURL コマンドをコピーします。 かっこ内の値を、ターミナルに合わせて次のパラメーターに置き換えます。 かっこは必ず削除してください。
curl -X POST https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token \
-d 'client_id={web-app-calls-web-api_application_client_id}' \
-d 'api://{web_API_application_client_id}/Forecast.Read' \
-d 'code={authorization_code}&session_state={web-app-calls-web-api_application_client_id}' \
-d 'redirect_uri=http://localhost' \
-d 'grant_type=authorization_code' \
-d 'client_secret={client_secret}'
{tenant_id}
は Web アプリ Directory (tenant) ID です。client_id={web-app-calls-web-api_application_client_id}
と session_state={web-app-calls-web-api_application_client_id}
は、Web アプリの (web-app-calls-web-api) [概要] ペインのアプリケーション (クライアント) ID です。api://{web_API_application_client_id}/Forecast.Read
は、Web API の (NewWebAPI1) [概要] ペインのアプリケーション (クライアント) ID です。code={authorization_code}
は、「承認コードを要求する」で受信した承認コードです。 これにより、cURL ツールはアクセス トークンを要求できます。client_secret={client_secret}
は、「クライアント シークレットを追加する」で記録したクライアント シークレットの値です。cURL コマンドを実行します。正しく入力すると、次の出力のような JSON 応答が表示されます。
{
"token_type": "Bearer",
"scope": "api://{web_API_application_client_id}/Forecast.Read",
"expires_in": 3600,
"ext_expires_in": 3600,
"access_token": "{access_token}"
}
前の cURL コマンドを実行すると、Microsoft ID プラットフォームによってアクセス トークンが提供されました。 取得したトークンを HTTP 要求のベアラーとして使用して、Web API を呼び出せるようになりました。
Web API を呼び出すには、次の cURL コマンドをコピーし、かっこ内の次の値を置き換えて、ターミナルに貼り付けます。
curl -X GET https://localhost:{port}/weatherforecast -ki \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer {access_token}"
{access_token}
前のセクションの JSON 出力から記録されたアクセス トークン値。{port}
ターミナルで API を実行するときに記録された Web API からのポート番号。 https
ポート番号であることを確認します。要求に有効なアクセス トークンが含まれている場合、想定される応答は HTTP/2 200
で、出力は次のようになります。
HTTP/2 200
content-type: application/json; charset=utf-8
date: Day, DD Month YYYY HH:MM:SS
server: Kestrel
[{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":36,"summary":"Hot","temperatureF":96},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":43,"summary":"Warm","temperatureF":109},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":18,"summary":"Warm","temperatureF":64},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":50,"summary":"Chilly","temperatureF":121},{"date":"YYYY-MM-DDTHH:MM:SS","temperatureC":3,"summary":"Bracing","temperatureF":37}]
OAuth 2.0 の承認コード フローとアプリケーションの種類の詳細については、以下を参照してください。
トレーニング
認定資格
Microsoft Certified: Azure Developer Associate - Certifications
Azure Functions の作成、Web アプリの実装と管理、Azure ストレージを利用したソリューションの開発などを行うために、Microsoft Azure でエンド ツー エンドのソリューションを構築します。
ドキュメント
Insomnia で ASP.NET Core の Web API を呼び出す - Microsoft identity platform
Microsoft ID プラットフォームと Insomnia を使って、保護された ASP.NET Core Web API を呼び出す方法について説明します。
Web API のドキュメント - Microsoft identity platform
Microsoft が提供するクイック スタート、チュートリアル、および詳細な攻略ガイドを使用して、Web API の保護、およびアップストリーム API からのダウンストリーム Web API の呼び出しの方法について説明します。
Web API を呼び出す Web API を登録する - Microsoft identity platform
ダウンストリーム Web API を呼び出す Web API を構築する方法について説明します (アプリの登録)