Веб-API, который вызывает веб-API: получение токена для приложения

После создания объекта клиентского приложения с его помощью можно получить токен, который затем будет использоваться для вызова веб-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] , который гарантирует, что только прошедшие проверку подлинности вызовы могут использовать веб-API.

[Authorize]
public class MyApiController : Controller
{
    /// <summary>
    /// The web API will accept only tokens 1) for users, 2) that have the `access_as_user` scope for
    /// this API.
    /// </summary>
    static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

     static readonly string[] scopesToAccessDownstreamApi = new string[] { "api://MyTodolistService/access_as_user" };

     readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

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

    [RequiredScopes(Scopes = scopesToAccessDownstreamApi)]
    public IActionResult Index()
    {
        // Get an authorization header.
        IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
        string[] scopes = new string[]{"user.read"};
        string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

        return await callTodoListService(authorizationHeader);
    }
}

Дополнительные сведения о методе callTodoListService см. в статье Веб-API, который вызывает интерфейсы веб-API: вызов API.

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

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