Поделиться через


Веб-приложение, вызывающее веб-API. Получение токена для приложения

Вы создали объект клиентского приложения. Теперь вы используете его для получения маркера для вызова веб-API. В ASP.NET и ASP.NET Core вызов веб-API выполняется в контроллере:

  • Получите токен для веб-API с помощью кэша токенов. Чтобы получить этот токен, вызовите метод Библиотеки проверки подлинности Майкрософт (MSAL) AcquireTokenSilent (или эквивалентный метод в Microsoft.Identity.Web).
  • Вызовите защищенный API, передав ему маркер доступа в качестве параметра.

Microsoft.Identity.Web добавляет методы расширения, которые предоставляют удобные службы для вызова Microsoft Graph или подчиненных веб-API. Эти методы подробно описаны в статье Веб-приложение, которое вызывает веб-API: вызов API. При использовании этих вспомогательных методов вам не нужно получать токен вручную.

Однако если вы хотите получить токен вручную, в следующем коде показан пример использования Microsoft.Identity.Web в контроллере Home для этой цели. Он вызывает Microsoft Graph с помощью REST API (вместо пакета SDK для Microsoft Graph). Как правило, вам не нужно получать маркер, необходимо создать заголовок авторизации, добавляемый в запрос. Чтобы получить заголовок авторизации, вы внедряете IAuthorizationHeaderProvider службу путем внедрения зависимостей в конструктор контроллера (или конструктор страницы при использовании Blazor) и используете ее в действиях контроллера. Этот интерфейс содержит методы, которые создают строку, содержащую протокол (Bearer, Pop, ...) и токен. Чтобы получить заголовок авторизации для вызова API от имени пользователя, используйте (CreateAuthorizationHeaderForUserAsync). Чтобы получить заголовок авторизации для вызова нижестоящего API от имени самого приложения, в сценарии управляющей программы используйте (CreateAuthorizationHeaderForAppAsync).

Методы контроллера защищены атрибутом [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 путем внедрения зависимостей.

Ниже приведен упрощенный код для действия HomeController, которое получает токен для вызова Microsoft Graph:

[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);
}

Чтобы лучше понять, как работает код, необходимый для этого сценария, см. шаг 2 (2-1. Веб-приложение, вызывающее Microsoft Graph) в учебнике ms-identity-aspnetcore-webapp-tutorial.

Атрибут AuthorizeForScopes в верхней части действия контроллера (или страницы Razor, если используется шаблон Razor) предоставляется с помощью Microsoft.Identity.Web. Это гарантирует, что при необходимости (и постепенно) пользователь будет получать запрос на согласие.

Существуют и другие сложные варианты, например:

  • Вызов нескольких интерфейсов API.
  • Обработка добавочного согласия и условного доступа.

Эти дополнительные действия описаны в главе 3 учебника 3-WebApp-multi-APIs.

Следующие шаги

Перейдите к следующей статье в этом сценарии Вызов веб-API.