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 の呼び出しが行われます。 ダウンストリーム API を呼び出すためのトークンを取得するには、コントローラーのコンストラクター (Blazor を使用する場合はページ コンストラクター) に依存関係を挿入して、ITokenAcquisition サービスを挿入し、コントローラー アクションで使用します。これにより、ユーザーのトークン (GetAccessTokenForUserAsync)、またはデーモン シナリオでのアプリケーション自体 (GetAccessTokenForAppAsync) のトークンが取得されます。

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

[Authorize]
public class HomeController : Controller
{
 readonly ITokenAcquisition tokenAcquisition;

 public HomeController(ITokenAcquisition tokenAcquisition)
 {
  this.tokenAcquisition = tokenAcquisition;
 }

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

}

ITokenAcquisition サービスは、依存関係の挿入を使用して ASP.NET によって挿入されます。

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 tokenAcquisition.GetAccessTokenForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", 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 の呼び出しに関する記事に進みます。