Application web qui appelle des API web : Acquérir un jeton pour l’application

Vous avez généré l’objet de votre application cliente. À présent, vous allez l’utiliser pour acquérir un jeton afin d’appeler une API web. Dans ASP.NET ou ASP.NET Core, l’appel d’une API web s’effectue dans le contrôleur :

  • Obtenir un jeton pour l’API web en utilisant le cache de jetons. Pour recevoir ce jeton, vous appelez la méthode MSAL (Microsoft Authentication Library) AcquireTokenSilent (ou l’équivalent dans Microsoft.Identity.Web).
  • Appelez l’API protégée, en lui transmettant le jeton d’accès en tant que paramètre.

Microsoft.Identity.Web ajoute des méthodes d’extension qui fournissent des services pratiques pour appeler Microsoft Graph ou une API web en aval. Ces méthodes sont expliquées en détail dans Application web qui appelle des API web : Appeler une API. Avec ces méthodes d’assistance, vous n’avez pas besoin d’acquérir manuellement un jeton.

Toutefois, si vous souhaitez acquérir manuellement un jeton, le code suivant montre un exemple d’utilisation de Microsoft.Identity.Web pour le faire dans un contrôleur home. Il appelle Microsoft Graph à l’aide de l’API REST (au lieu du Kit de développement logiciel (SDK) Microsoft Graph). Pour obtenir un jeton permettant d’appeler l’API en aval, injectez le service ITokenAcquisition par injection de dépendance dans le constructeur de votre contrôleur (ou votre constructeur de page, si vous utilisez Blazor), puis utilisez-le dans vos actions de contrôleur, en obtenant un jeton pour l’utilisateur (GetAccessTokenForUserAsync) ou pour l’application elle-même (GetAccessTokenForAppAsync) dans un scénario basé sur un démon.

Les méthodes de contrôleur sont protégées par un attribut [Authorize] qui veille à ce que seuls des utilisateurs authentifiés puissent utiliser l’application web.

[Authorize]
public class HomeController : Controller
{
 readonly ITokenAcquisition tokenAcquisition;

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

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

}

Le service ITokenAcquisition est injecté par ASP.NET à l’aide de l’injection de dépendances.

Voici le code simplifié pour l’action du HomeController, qui obtient un jeton pour appeler 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);
}

Pour mieux comprendre le code nécessaire dans ce scénario, consultez la phase 2 (2-1-Web App Calls Microsoft Graph) [Application web appelant Microsoft Graph] du tutoriel ms-identity-aspnetcore-webapp-tutorial.

L’attribut AuthorizeForScopes en haut de l’action du contrôleur (ou de la page Razor si vous utilisez un modèle Razor) est fourni par Microsoft.Identity.Web. Il s’assure que l’utilisateur est invité à donner son consentement, le cas échéant, et de façon incrémentielle.

Il existe d’autres variantes complexes, telles que :

  • Appels de plusieurs API.
  • Traitement du consentement incrémentiel et de l’accès conditionnel.

Ces étapes avancées sont abordées dans le chapitre 3 du tutoriel 3-WebApp-multi-APIs.

Étapes suivantes

Passez à l’article suivant de ce scénario, Appeler une API web.