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

Ha compilado el objeto de aplicación cliente. Ahora, se usa para adquirir un token para llamar a una API web. En ASP.NET o ASP.NET Core, las llamadas a las API web se hacen en el controlador:

  • Obtenga un token para la API web mediante la caché de tokens. Para obtener este token, llame al método AcquireTokenSilent de la biblioteca de autenticación de Microsoft (MSAL) (o al equivalente en Microsoft.Identity.Web).
  • Llame a la API protegida; para ello, pásele el token de acceso como un parámetro.

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 los usuarios autenticados pueden usar la aplicación web.

[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 pone IAuthorizationHeaderProvider a disposición de la inserción de dependencias.

Este es código simplificado para la acción de HomeController, que obtiene un token para llamar a 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);
}

Para entender mejor el código necesario para este escenario, consulte el paso de la fase 2 2-1- Aplicación web llama a Microsoft Graph del tutorial ms-identity-aspnetcore-webapp-tutorial.

Microsoft.Identity.Web proporciona el atributo AuthorizeForScopes en la parte superior de la acción del controlador (o de la página de Razor si usa una plantilla de Razor). Garantiza que se le solicita consentimiento al usuario, en caso necesario y de manera incremental.

Hay otras variaciones complejas, como:

  • Llamada a varias API.
  • Procesamiento del consentimiento incremental y el acceso condicional.

Estos pasos avanzados se tratan en el capítulo 3 del tutorial 3-WebApp-multi-APIs.

Pasos siguientes

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