Freigeben über


Web-App, die Web-APIs aufruft: Abrufen eines Tokens für die App

Sie haben das Clientanwendungsobjekt erstellt. Jetzt rufen Sie damit ein Token ab, um eine Web-API aufzurufen. In ASP.NET oder ASP.NET Core erfolgt das Aufrufen einer Web-API im Controller:

  • Mit dem Tokencache wird ein Token für die Web-API abgerufen. Zum Abrufen dieses Token rufen Sie die MSAL-Methode AcquireTokenSilent (Microsoft Authentication Library) auf (oder eine entsprechende Methode in Microsoft.Identity.Web).
  • Rufen Sie die geschützte API auf, indem Sie das Zugriffstoken als Parameter übergeben.

Von Microsoft.Identity.Web werden Erweiterungsmethoden hinzugefügt, die praktische Dienste zum Aufrufen von Microsoft Graph oder einer Downstream-Web-API bereitstellen. Eine ausführliche Beschreibung dieser Methoden finden Sie unter Web-App, die Web-APIs aufruft: Aufrufen einer Web-API. Mit diesen Hilfsmethoden ist kein manueller Tokenabruf erforderlich.

Wenn Sie jedoch ein Token manuell abrufen möchten, sehen Sie sich den folgenden Code an, der ein Beispiel dafür bietet, wie Sie dies mithilfe von Microsoft.Identity.Web in einem Home-Controller tun können. Microsoft Graph wird mit der REST-API (anstelle des Microsoft Graph SDK) aufgerufen. In der Regel müssen Sie kein Token abrufen, sondern einen Autorisierungsheader erstellen, den Sie Ihrer Anforderung hinzufügen. Zum Abrufen eines Autorisierungsheaders fügen Sie den IAuthorizationHeaderProvider-Dienst durch eine Abhängigkeitsinjektion in den Konstruktor Ihres Controllers ein (oder in den Seitenkonstruktor, wenn Sie Blazor verwenden) und verwenden ihn in den Controlleraktionen. Diese Schnittstelle verfügt über Methoden, die eine Zeichenfolge erzeugen, die das Protokoll (Bearer, Pop...) und ein Token enthält. Zum Abrufen eines Autorisierungsheaders zum Aufrufen einer API für den Benutzer verwenden Sie (CreateAuthorizationHeaderForUserAsync). Verwenden Sie zum Abrufen eines Autorisierungsheaders zum Aufrufen einer Downstream-API für die Anwendung selbst in einem Daemon-Szenario (CreateAuthorizationHeaderForAppAsync).

Die Controllermethoden sind durch ein [Authorize]-Attribut geschützt, das sicherstellt, dass nur authentifizierte Benutzer die Web-App verwenden dürfen.

[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 stellt IAuthorizationHeaderProvider durch Abhängigkeitsinjektion zur Verfügung.

Im Folgenden finden Sie den vereinfachten Code für die Aktion des HomeController, mit der ein Token zum Aufrufen von Microsoft Graph abgerufen wird:

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

Um den für dieses Szenario erforderlichen Code besser zu verstehen, sollten Sie sich den Schritt der 2. Phase (2.1 Web-App ruft Microsoft Graph auf) im Tutorial ms-identity-aspnetcore-webapp-tutorial ansehen.

Das AuthorizeForScopes-Attribut über der Controlleraktion (oder der Razor-Seite bei Verwendung einer Razor-Vorlage) wird von Microsoft.Identity.Web bereitgestellt. Damit wird sichergestellt, dass der Benutzer bei Bedarf (und inkrementell) zur Zustimmung aufgefordert wird.

Es gibt andere komplexe Varianten, wie beispielsweise:

  • Aufrufen mehrerer APIs
  • Verarbeiten der inkrementeller Einwilligung und des bedingten Zugriffs.

Diese erweiterten Schritte werden in Kapitel 3 des Tutorials 3-WebApp-multi-APIs erörtert.

Nächste Schritte

Fahren Sie mit dem nächsten Artikel in diesem Szenario fort: Aufrufen einer Web-API.