Web API を呼び出す Web API: API を呼び出す
トークンを取得した後に、保護された Web API を呼び出せます。 通常、Web アプリのコントローラーまたはページからダウンストリーム API を呼び出します。
コントローラー コード
Microsoft.Identity.Web を使用する場合、3 つの使用シナリオがあります。
- オプション 1: SDK を使用して Microsoft Graph を呼び出す
- オプション 2: ヘルパー クラスを使用してダウンストリーム Web API を呼び出す
- オプション 3:ヘルパー クラスを使用せずにダウンストリーム Web API を呼び出す
オプション 1: SDK を使用して Microsoft Graph を呼び出す
このシナリオでは Microsoft.Identity.Web.GraphServiceClient NuGet パッケージを追加し、コード構成で説明されているように Startup.cs に .AddMicrosoftGraph()
を追加しました。また、コントローラーかページ コンストラクターに GraphServiceClient
を直接挿入して、アクションで使用できます。 次の例の Razor ページには、サインインしたユーザーの写真が表示されます。
[Authorize]
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public class IndexModel : PageModel
{
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
public async Task OnGet()
{
var user = await _graphServiceClient.Me.GetAsync();
try
{
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
ViewData["name"] = user.DisplayName;
}
catch (Exception)
{
ViewData["photo"] = null;
}
}
}
オプション 2:ヘルパー クラスを使用してダウンストリーム Web API を呼び出す
このシナリオでは、コード構成に関するページで説明されているように、Startup.cs に .AddDownstreamApi()
を追加し、コントローラーまたはページ コンストラクターに IDownstreamWebApi
サービスを直接挿入してアクションでそれを使用することができます。
[Authorize]
[AuthorizeForScopes(ScopeKeySection = "TodoList:Scopes")]
public class TodoListController : Controller
{
private IDownstreamWebApi _downstreamWebApi;
private const string ServiceName = "TodoList";
public TodoListController(IDownstreamWebApi downstreamWebApi)
{
_downstreamWebApi = downstreamWebApi;
}
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamWebApi.CallApiForUserAsync(
ServiceName,
options =>
{
options.RelativePath = $"me";
});
return View(value);
}
また、CallApiForUserAsync
メソッドには、オブジェクトを直接受け取ることができる、厳密に型指定されたジェネリック オーバーライドもあります。 たとえば、次のメソッドは Todo
インスタンスを受け取ります。これは、Web API から返された JSON の厳密に型指定された表現です。
// GET: TodoList/Details/5
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamWebApi.CallApiForUserAsync<object, Todo>(
ServiceName,
null,
options =>
{
options.HttpMethod = HttpMethod.Get;
options.RelativePath = $"api/todolist/{id}";
});
return View(value);
}
オプション 3:ヘルパー クラスを使用せずにダウンストリーム Web API を呼び出す
IAuthorizationHeaderProvider
インターフェイスを使用して承認ヘッダーを取得することにした場合、次のコードは、「Web API を呼び出す Web API: アプリのトークンを取得する」に示されているコード例を続行します。 このコードは、API コントローラーのアクションで呼び出されます。 todolist という名前のダウンストリーム API を呼び出します。
トークンを取得した後、ダウンストリーム API を呼び出すベアラー トークンとしてそれを使用します。
private async Task CallTodoListService(string accessToken)
{
// After the token has been returned by Microsoft.Identity.Web, add it to the HTTP authorization header before making the call to access the todolist service.
authorizationHeader = await authorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);
_httpClient.DefaultRequestHeaders["Authorization"] = authorizationHeader;
// Call the todolist service.
HttpResponseMessage response = await _httpClient.GetAsync(TodoListBaseAddress + "/api/todolist");
// ...
}
次のステップ
複数パートのチュートリアル シリーズで、ユーザーをサインインさせる ASP.NET Core Web アプリを構築して、さらに詳しく学習する
Microsoft ID プラットフォームの Web API サンプルを確認する