Freigeben über


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

Nachdem Sie ein Clientanwendungsobjekt erstellt haben, verwenden Sie es, um ein Token zu erhalten, mit dem Sie eine Web-API aufrufen können.

Code im Controller

Microsoft.Identity.Web fügt Erweiterungsmethoden hinzu, die praktische Dienste zum Aufrufen von Microsoft Graph oder einer nachgeschalteten 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). Um einen Autorisierungsheader zu erhalten, um im Namen der Anwendung selbst eine Downstream-API in einem Daemon-Szenario aufzurufen, verwenden Sie (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.