Web API を呼び出す Web アプリ:アプリのトークンを取得する

クライアント アプリケーション オブジェクトは構築済みです。 次はこれを使用して Web API を呼び出すトークンを取得します。 ASP.NET または ASP.NET Core では、Web API の呼び出しはコントローラーで実行されます。

  • トークン キャッシュを使用して Web API のトークンを取得します。 このトークンを取得するには、Microsoft 認証ライブラリ (MSAL) の AcquireTokenSilent メソッド (または Microsoft.Identity.Web の同等のもの) を呼び出します。
  • 保護された API を呼び出して、アクセス トークンをパラメーターとして渡します。

Microsoft.Identity.Web には、Microsoft Graph またはダウンストリーム Web API を呼び出す便利なサービスを提供する拡張メソッドが追加されています。 これらのメソッドの詳細については、「Web API を呼び出す Web アプリ: API を呼び出す」を参照してください。 これらのヘルパー メソッドを使用すれば、トークンを手動で取得する必要はありません。

ただし、トークンを手動で取得する場合は、ホーム コントローラーで取得することを目的とした Microsoft.Identity.Web の使用の例が、次のコードによって示されています。 これにより、REST API (Microsoft Graph SDK ではなく) を使用した、Microsoft Graph の呼び出しが行われます。 通常、トークンを取得する必要はありませんが、要求に追加する Authorization ヘッダーを作成する必要があります。 Authorization ヘッダーを取得するには、コントローラーのコンストラクター (Blazor を使用する場合はページ コンストラクター) 内での依存関係の挿入によって、IAuthorizationHeaderProvider サービスを挿入し、それをコントローラー アクションで使用します。 このインターフェイスには、プロトコル (Bearer や Pop など) とトークンを含む文字列を生成するメソッドが用意されています。 ユーザーに代わって API を呼び出す Authorization ヘッダーを取得するには、(CreateAuthorizationHeaderForUserAsync) を使用します。 アプリケーション自体に代わってダウンストリーム API を呼び出す Authorization ヘッダーを取得するには、デーモン シナリオで (CreateAuthorizationHeaderForAppAsync) を使用します。

コントローラー メソッドは、認証されたユーザーのみが Web アプリを使用できるようにする [Authorize] 属性によって保護されます。

[Authorize]
public class HomeController : Controller
{
 readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

 public HomeController(IAuthorizationHeaderProvider authorizationHeaderProvider)
 {
  this.authorizationHeaderProvider = authorizationHeaderProvider;
 }

 // Code for the controller actions (see code below)

}

ASP.NET Coreは、依存関係の挿入によって IAuthorizationHeaderProvider を使用できるようにします。

Microsoft Graph を呼び出すトークンを取得する HomeController のアクションの簡略化されたコードを次に示します。

[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
 // Acquire the access token.
 string[] scopes = new string[]{"user.read"};
 string accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Add("Authorization", accessToken);
 string json = await client.GetStringAsync(url);
}

このシナリオに必要なコードをさらに理解したい場合は、ms-identity-aspnetcore-Webapp-tutorial チュートリアルのフェーズ 2 (2-1-Web App Calls Microsoft Graph) の手順を参照してください。

コントローラー アクションの上 (または Razor テンプレートを使用する場合は Razor ページ) の AuthorizeForScopes 属性は、Microsoft.Identity.Web によって提供されます。 これにより、必要に応じて、かつ段階的にユーザーに同意が求められます。

次のような複雑なバリエーションもあります。

  • 複数の API の呼び出し。
  • 増分同意と条件付きアクセスの処理。

このような高度な手順については、3-WebApp-multi-APIs チュートリアルの第 3 章を参照してください。

次のステップ

このシナリオの次の記事である Web API の呼び出しに関する記事に進みます。