Uma API Web que chama APIs Web: adquirir um token para o aplicativo

Depois de compilar um objeto de aplicativo cliente, use-o para adquirir um token que você pode usar para chamar uma API Web.

Código no controlador

Microsoft.Identity.Web adiciona métodos de extensão que fornecem serviços de conveniência para chamar o Microsoft Graph ou uma API Web downstream. Esses métodos são explicados em detalhes em Um aplicativo Web que chama APIs Web: chamar uma API. Com esses métodos auxiliares, não será necessário adquirir um token manualmente.

No entanto, se você quiser adquirir um token manualmente, o código a seguir mostra um exemplo de como usar Microsoft.Identity.Web para fazer isso em um controlador doméstico. Ele chama o Microsoft Graph usando a API REST (em vez do SDK do Microsoft Graph). Normalmente, você não precisa obter um token, você precisa criar um cabeçalho de autorização para adicionar à sua solicitação. Para obter um cabeçalho de autorização, injete o serviço IAuthorizationHeaderProvider por dependência em seu construtor do controlador (ou seu construtor de página, se você usar o Blazor) e use-o em suas ações de controlador. Essa interface tem métodos que produzem uma cadeia de caracteres que contém o protocolo (Portador, Pop, ...) e um token. Para obter um cabeçalho de autorização para chamar uma API em nome do usuário, use (CreateAuthorizationHeaderForUserAsync). Para obter um cabeçalho de autorização para chamar uma API downstream em nome do próprio aplicativo, em um cenário de daemon, use (CreateAuthorizationHeaderForAppAsync).

Os métodos do controlador são protegidos por um atributo [Authorize] que garante que somente chamadas autenticadas possam usar o aplicativo Web.

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

Para saber mais sobre o método callTodoListService, confira Uma API Web que chama APIs Web: chamar uma API.

Próximas etapas

Vá para o próximo artigo neste cenário, Chamar uma API.