Partilhar via


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

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

Código no responsável pelo tratamento

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

Se, no entanto, você quiser adquirir manualmente um token, o código a seguir mostra um exemplo de uso de 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 que você adiciona à sua solicitação. Para obter um cabeçalho de autorização, você injeta o IAuthorizationHeaderProvider serviço por injeção de dependência no construtor do controlador (ou no construtor de página se usar Blazor) e o usa nas ações do controlador. Esta interface tem métodos que produzem uma string contendo o protocolo (Bearer, 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 [Authorize] atributo que garante que apenas chamadas autenticadas possam usar a API da 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 obter detalhes sobre o callTodoListService método, consulte Uma API da Web que chama APIs da Web: chame uma API.

Próximos passos

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