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

Nach dem Erstellen eines Clientanwendungsobjekts rufen Sie damit ein Token ab. Dieses verwenden Sie anschließend, eine Web-API aufzurufen.

Code im Controller

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 Aufrufe die Web-API verwenden dürfen.

[Authorize]
public class MyApiController : Controller
{
    /// <summary>
    /// The web API will accept only tokens 1) for users, 2) that have the `access_as_user` scope for
    /// this API.
    /// </summary>
    static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

     static readonly string[] scopesToAccessDownstreamApi = new string[] { "api://MyTodolistService/access_as_user" };

     readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

    public MyApiController(IAuthorizationHeaderProvider authorizationHeaderProvider)
    {
      this.authorizationHeaderProvider = authorizationHeaderProvider;
    }

    [RequiredScopes(Scopes = scopesToAccessDownstreamApi)]
    public IActionResult Index()
    {
        // Get an authorization header.
        IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
        string[] scopes = new string[]{"user.read"};
        string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

        return await callTodoListService(authorizationHeader);
    }
}

Ausführliche Informationen zur callTodoListService-Methode finden Sie unter Web-API, die Web-APIs aufruft: Aufrufen einer Web-API.

Nächste Schritte

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