Share via


En webbapp som anropar webb-API:er: Hämta en token för appen

Du har skapat klientprogramobjektet. Nu använder du den för att hämta en token för att anropa ett webb-API. I ASP.NET eller ASP.NET Core görs anrop av ett webb-API i kontrollanten:

  • Hämta en token för webb-API:et med hjälp av tokencachen. För att hämta den här token anropar du msal-metoden (Microsoft Authentication Library) AcquireTokenSilent (eller motsvarande i Microsoft.Identity.Web).
  • Anropa det skyddade API:et och skicka åtkomsttoken till den som en parameter.

Microsoft.Identity.Web lägger till tilläggsmetoder som tillhandahåller bekvämlighetstjänster för att anropa Microsoft Graph eller ett underordnat webb-API. Dessa metoder beskrivs i detalj i En webbapp som anropar webb-API:er: Anropa ett API. Med de här hjälpmetoderna behöver du inte skaffa en token manuellt.

Om du däremot vill hämta en token manuellt visar följande kod ett exempel på hur du använder Microsoft.Identity.Web för att göra det i en hemstyrenhet. Den anropar Microsoft Graph med hjälp av REST-API:et (i stället för Microsoft Graph SDK). Vanligtvis behöver du inte hämta en token. Du måste skapa ett auktoriseringshuvud som du lägger till i din begäran. För att få ett auktoriseringshuvud matar du in IAuthorizationHeaderProvider tjänsten genom beroendeinmatning i styrenhetens konstruktor (eller sidkonstruktorn om du använder Blazor) och använder den i dina kontrollantåtgärder. Det här gränssnittet har metoder som skapar en sträng som innehåller protokollet (Bearer, Pop, ...) och en token. Om du vill hämta ett auktoriseringshuvud för att anropa ett API för användarens räkning använder du (CreateAuthorizationHeaderForUserAsync). Om du vill hämta ett auktoriseringshuvud för att anropa ett underordnat API för själva programmet använder du (CreateAuthorizationHeaderForAppAsync) i ett daemonscenario.

Kontrollantmetoderna skyddas av ett [Authorize] attribut som säkerställer att endast autentiserade användare kan använda webbappen.

[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 tillgängliggörs IAuthorizationHeaderProvider genom beroendeinmatning.

Här är förenklad kod för åtgärden HomeController, som hämtar en token för att anropa 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);
}

Mer information om vilken kod som krävs för det här scenariot finns i steget fas 2 (2-1-Webbapp anropar Microsoft Graph) i självstudiekursen ms-identity-aspnetcore-webapp-tutorial .

Attributet AuthorizeForScopes ovanpå kontrollantåtgärden (eller på Razor-sidan om du använder en Razor-mall) tillhandahålls av Microsoft.Identity.Web. Det säkerställer att användaren tillfrågas om medgivande om det behövs och stegvis.

Det finns andra komplexa variationer, till exempel:

  • Anropa flera API:er.
  • Bearbeta inkrementellt medgivande och villkorsstyrd åtkomst.

Dessa avancerade steg beskrivs i kapitel 3 i självstudiekursen 3-WebApp-multi-API:er .

Nästa steg

Gå vidare till nästa artikel i det här scenariot, Anropa ett webb-API.