Freigeben über


Lernprogramm: Aufrufen einer geschützten Web-API aus Ihrer .NET-Daemon-App

Gilt für:Grüner Kreis mit weißem Häkchen. Mitarbeitermandanten Grüner Kreis mit weißem Häkchen. Externe Mandanten (weitere Informationen)

In diesem Lernprogramm wird veranschaulicht, wie Sie eine geschützte Web-API aus einer .NET-Daemon-App aufrufen. Sie ermöglichen es der Clientdaemon-App, ein Zugriffstoken mithilfe einer eigenen Identität zu erwerben und dann die Web-API aufzurufen. In unserem Fall rufen wir einen geschützten Microsoft Graph-Endpunkt auf.

In diesem Tutorial:

  • Konfigurieren Sie eine Daemon-App, um ihre App-Registrierungsdetails zu verwenden. Stellen Sie sicher, dass Sie der App die Berechtigung "User.Read.All " für die Microsoft Graph-API erteilen.
  • Erstellen Sie eine Daemon-App, die ein Token im eigenen Auftrag abruft, und ruft eine geschützte Web-API auf.

Voraussetzungen

  • .NET. In diesem Lernprogramm verwenden wir .NET 9.0.
  • Visual Studio Code oder ein anderer Code-Editor.
  • Eine App-Registrierung in Ihrem Mandanten. Stellen Sie sicher, dass Sie über die folgenden Informationen zur App-Registrierung verfügen:
    • Die Anwendungs-ID (Client) der Clientweb-App, die Sie registriert haben
    • Die Verzeichnis-ID (Mandanten-ID), in der Sie Ihre Web-App registriert haben.
    • Der Wert des Clientgeheimnisses für die Web-App, die Sie erstellt haben.

Erstellen einer .NET-Daemon-App

  1. Öffnen Sie Ihr Terminal und navigieren Sie zu dem Ordner, in dem Sie Ihr Projekt speichern möchten.

  2. Initialisieren Sie eine .NET-Konsolen-App, und navigieren Sie zum Stammordner.

    dotnet new console -n DotnetDaemon
    cd DotnetDaemon
    

Pakete installieren

Installieren Microsoft.Identity.Web und Microsoft.Identity.Web.DownstreamApi Pakete:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web stellt den Klebstoff zwischen ASP.NET Core, der Authentifizierungs-Middleware und der Microsoft Authentication Library (MSAL) für .NET bereit, sodass Sie Ihrer App Authentifizierungs- und Autorisierungsfunktionen hinzufügen können. Microsoft.Identity.Web.DownstreamApi stellt eine Schnittstelle bereit, die zum Aufrufen einer downstream-API verwendet wird.

Erstelle die appsettings.json-Datei und füge Registrierungskonfigurationen hinzu.

  1. Erstellen Sie die Datei appsettings.json im Stammordner der App.

  2. Fügen Sie die Details der App-Registrierung in die Datei appsettings.json ein.

    {
        "AzureAd": {
            // "Authority": "", you can use this for customer tenants in place of Instance and TenantId values
            "Instance": "https://login.microsoftonline.com/",
            "TenantId": "Enter_the_Tenant_ID_Here",
            "ClientId": "Enter_the_Application_ID_Here",
            "ClientCredentials": [
                {
                    "SourceType": "ClientSecret",
                    "ClientSecret": "Enter_the_Client_Secret_Here"
                }
            ]
        },
        "DownstreamApi": {
            "BaseUrl": "https://graph.microsoft.com",
            "RelativePath": "/v1.0/users/",
            "RequestAppToken": true,
            "Scopes": [
                "https://graph.microsoft.com/.default"
            ]
        }
    }
    

    Ersetzen Sie die folgenden Werte durch eigene Werte:

    Wert BESCHREIBUNG
    Enter_the_Application_ID_Here Die Anwendungs-ID (Client) der Clientdaemon-App, die Sie registriert haben.
    Enter_the_Client_Secret_Here Der Geheimniswert der Daemon-App, den Sie erstellt haben.
    Enter_the_Tenant_ID_Here Die Mandanten-ID des Verzeichnisses/Mandanten, in dem die App registriert ist.

    Hinweis

    Für Apps, die im externen Mandanten registriert sind, können Sie Authority verwenden und sowohl Instance als auch TenantId entfernen.

    "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/". Dabei ist Enter_the_Tenant_Subdomain_Here die Unterdomäne des Mandanten.

  3. Fügen Sie der Projektdatei die appsettings.json Datei hinzu. Die Projektdatei ist eine CSPROJ-Datei in Ihrem Projekt. Dies liegt daran, dass die Datei in das Ausgabeverzeichnis kopiert werden muss.

    <ItemGroup>
        <None Update="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>
    

Zugriffstoken abrufen

  1. Öffnen Sie die program.cs Datei im Code-Editor, und löschen Sie deren Inhalt.

  2. Fügen Sie Ihre Pakete zur Datei hinzu.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Erstellen Sie die Tokenakquisitionsinstanz. Verwenden Sie die GetDefaultInstance Methode der TokenAcquirerFactory Paketklasse Microsoft.Identity.Web , um die Tokenakquisitionsinstanz zu erstellen. Standardmäßig liest die Instanz eine appsettings.json Datei, wenn sie im selben Ordner wie die App vorhanden ist. GetDefaultInstance ermöglicht uns auch das Hinzufügen von Diensten zur Dienstesammlung.

    Fügen Sie diese Codezeile zur program.cs Datei hinzu:

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Konfigurieren Sie die Anwendungsoptionen, die aus der Konfiguration gelesen werden sollen, und fügen Sie den DownstreamApi Dienst hinzu. Der DownstreamApi Dienst stellt eine Schnittstelle bereit, die zum Aufrufen einer downstream-API verwendet wird. Wir rufen diesen Dienst DownstreamAPI im Config-Objekt auf. Die Daemon-App liest die nachgeschalteten API-Konfigurationen aus dem DownstreamApi-Abschnitt von appsettings.json. Standardmäßig erhalten Sie einen Arbeitsspeicher-Token-Cache.

    Fügen Sie der datei program.cs den folgenden Codeausschnitt hinzu:

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    

    Die nachgeschaltete API, die Sie aufrufen, ist Microsoft Graph. In diesem Lernprogramm verwenden wir den DownstreamApi Dienst. Sie können auch das Microsoft Graph SDK verwenden.

  5. Erstellen Sie den Token-Acquirer. Dadurch werden alle Dienste, die Sie hinzufügen, zusammengestellt, und es wird ein Dienstanbieter zurückgegeben. Verwenden Sie diesen Dienstanbieter, um Zugriff auf die api-Ressource zu erhalten, die Sie hinzufügen. In diesem Fall fügen Sie nur eine API-Ressource als nachgeschalteten Dienst hinzu, auf den Sie zugreifen möchten.

    Fügen Sie der datei program.cs den folgenden Codeausschnitt hinzu:

    var serviceProvider = tokenAcquirerFactory.Build();
    

Aufrufen der Web-API

  1. Fügen Sie Code hinzu, um Ihre geschützte Web-API mithilfe der IDownstreamApi Schnittstelle aufzurufen. In diesem Lernprogramm rufen wir einen Microsoft Graph-API-Endpunkt auf.

  2. Fügen Sie diesen Code zur datei program.cs hinzu:

    try
    {
        IDownstreamApi downstreamApi = serviceProvider.GetRequiredService<IDownstreamApi>();
    
        var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>("DownstreamApi");
        var content = await response.Content.ReadAsStringAsync();
        var statusCode = response.StatusCode;
    
        Console.WriteLine($"Response status code: {statusCode}");
    
        if (!content.Any())
        {
            Console.WriteLine("There are no users to display.");
            return;
        }
    
        Console.WriteLine(content);
    }
    catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
    

    Der Code ruft den Endpunkt auf, den Sie in der dateiappsettings.json definiert haben. Die GetForAppAsync Methode der IDownstreamApi Schnittstelle wird verwendet, um den Endpunkt aufzurufen. Die App ruft im eigenen Auftrag an. Die Methode gibt ein HttpResponseMessage Objekt zurück. Die Antwort wird dann als Zeichenfolge gelesen und in der Konsole angezeigt.

Ausführen der Clientdaemon-App

Navigieren Sie zum Stammordner der Daemon-App, und führen Sie den folgenden Befehl aus:

dotnet run

Wenn alles in Ordnung ist, sollte der Antwortstatuscode angezeigt werden: OK in Ihrem Terminal. Wenn Benutzer vorhanden sind, werden die Benutzer im Terminal aufgeführt, andernfalls wird die Meldung angezeigt, dass keine Benutzer angezeigt werden sollen.

Wenn Fehler auftreten, wird eine Fehlermeldung im Terminal angezeigt.

Fehlersuche

Falls Fehler auftreten,

  • Bestätigen Sie die Registrierungsdetails, die Sie der appsettings.json Datei hinzugefügt haben.
  • Vergewissern Sie sich, dass Sie der Projektdatei die appsettings.json Datei hinzugefügt haben.
  • Vergewissern Sie sich, dass Ihre App-Berechtigungen ordnungsgemäß konfiguriert sind.