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 lo va a usar 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 MSAL AcquireTokenSilent (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). Para obtener un token para llamar a la API de nivel inferior, se inserta el servicio ITokenAcquisition mediante la inserción de dependencias en el constructor del controlador (o el constructor de la página si utiliza Blazor) y se usa en las acciones del controlador, de modo que se obtiene un token para el usuario (GetAccessTokenForUserAsync) o para la propia aplicación (GetAccessTokenForAppAsync) en un escenario de demonio.

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 ITokenAcquisition tokenAcquisition;

 public HomeController(ITokenAcquisition tokenAcquisition)
 {
  this.tokenAcquisition = tokenAcquisition;
 }

 // Code for the controller actions (see code below)

}

ASP.NET inserta el servicio ITokenAcquisition mediante 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 tokenAcquisition.GetAccessTokenForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", 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.