Share via


Een web-app die web-API's aanroept: een token voor de app verkrijgen

U hebt uw clienttoepassingsobject gebouwd. Nu gebruikt u het om een token te verkrijgen om een web-API aan te roepen. In ASP.NET of ASP.NET Core wordt een web-API aangeroepen in de controller:

  • Haal een token op voor de web-API met behulp van de tokencache. Als u dit token wilt ophalen, roept u de MSAL-methode (Microsoft Authentication Library) AcquireTokenSilent aan (of het equivalent in Microsoft.Identity.Web).
  • Roep de beveiligde API aan, waarbij het toegangstoken als parameter wordt doorgegeven.

Microsoft.Identity.Web voegt uitbreidingsmethoden toe die handige services bieden voor het aanroepen van Microsoft Graph of een downstream-web-API. Deze methoden worden uitgebreid beschreven in een web-app die web-API's aanroept: een API aanroepen. Met deze helpermethoden hoeft u geen token handmatig te verkrijgen.

Als u echter handmatig een token wilt verkrijgen, ziet u in de volgende code een voorbeeld van het gebruik van Microsoft.Identity.Web in een homecontroller. Microsoft Graph wordt aangeroepen met behulp van de REST API (in plaats van de Microsoft Graph SDK). Meestal hoeft u geen token op te halen. U moet een autorisatieheader maken die u aan uw aanvraag toevoegt. Als u een autorisatieheader wilt ophalen, injecteert u de IAuthorizationHeaderProvider service door afhankelijkheidsinjectie in de constructor van uw controller (of de paginaconstructor als u Blazor gebruikt) en gebruikt u deze in de controlleracties. Deze interface bevat methoden die een tekenreeks produceren die het protocol bevat (Bearer, Pop, ...) en een token. Als u een autorisatieheader wilt ophalen om namens de gebruiker een API aan te roepen, gebruikt u (CreateAuthorizationHeaderForUserAsync). Als u een autorisatieheader wilt ophalen om een downstream-API namens de toepassing zelf aan te roepen, gebruikt u (CreateAuthorizationHeaderForAppAsyncin een daemon-scenario).

De controllermethoden worden beveiligd door een [Authorize] kenmerk dat ervoor zorgt dat alleen geverifieerde gebruikers de web-app kunnen gebruiken.

[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 maakt IAuthorizationHeaderProvider beschikbaar via afhankelijkheidsinjectie.

Hier volgt vereenvoudigde code voor de actie van de HomeController, waarmee een token wordt opgehaald om Microsoft Graph aan te roepen:

[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);
}

Zie de stap fase 2 (2-1-Web-app Roept Microsoft Graph) van de zelfstudie ms-identity-aspnetcore-webapp-tutorial voor meer inzicht in de code die vereist is voor dit scenario.

Het AuthorizeForScopes kenmerk boven op de controlleractie (of van de Razor-pagina als u een Razor-sjabloon gebruikt) wordt geleverd door Microsoft.Identity.Web. Het zorgt ervoor dat de gebruiker indien nodig om toestemming wordt gevraagd en incrementeel.

Er zijn andere complexe variaties, zoals:

  • Verschillende API's aanroepen.
  • Incrementele toestemming en voorwaardelijke toegang verwerken.

Deze geavanceerde stappen worden behandeld in hoofdstuk 3 van de zelfstudie 3-WebApp-multi-API's .

Volgende stappen

Ga verder met het volgende artikel in dit scenario, een web-API aanroepen.