API web que llama a API web: Adquisición de un token para la aplicación

Una vez que ha creado un objeto de aplicación cliente, lo puede usar para adquirir un token y usarlo para llamar a una API web.

Código del controlador

Microsoft.Identity.Web agrega métodos de extensión que proporcionan servicios útiles para llamar a Microsoft Graph o a una API web de nivel inferior. Estos métodos se explican con detalle en Aplicación web que llama a las API web: llamada a una API. Con estos métodos auxiliares, no es necesario adquirir un token manualmente.

Sin embargo, si desea adquirir manualmente un token, el código siguiente muestra un ejemplo de uso de Microsoft.Identity.Web para hacerlo en un controlador de inicio. Llama a Microsoft Graph mediante la API REST (en lugar del SDK de Microsoft Graph). Normalmente, no es necesario obtener un token; debe crear un encabezado de autorización que agregue a la solicitud. Para obtener un encabezado de autorización, inyecte el servicio IAuthorizationHeaderProvider mediante inyección de dependencia en el constructor de su controlador (o en el constructor de su página si utiliza Blazor), y utilícelo en las acciones de su controlador. Esta interfaz tiene métodos que generan una cadena que contiene el protocolo (Portador, Pop, ...) y un token. Para obtener un encabezado de autorización para llamar a una API en nombre del usuario, use (CreateAuthorizationHeaderForUserAsync). Para obtener un encabezado de autorización para llamar a una API de bajada en nombre de la propia aplicación, en un escenario de demonio, use (CreateAuthorizationHeaderForAppAsync).

Los métodos del controlador están protegidos por el atributo [Authorize], que garantiza que solo las llamadas autenticadas pueden usar la API 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 más información sobre el método callTodoListService, consulte API web que llama a API web: Llamada a una API.

Pasos siguientes

Avance al siguiente artículo de este escenario, Llamada a una API.