Freigeben über


Testen einer geschützten ASP.NET Core-Web-API

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

Dieses Lernprogramm ist der letzte Teil einer Reihe, die das Erstellen und Testen einer geschützten Web-API veranschaulicht, die in einem Microsoft Entra-Mandanten registriert ist. In Teil 1 dieser Reihe haben Sie eine ASP.NET Core-Web-API erstellt und ihre Endpunkte geschützt. Sie erstellen nun eine einfache Daemon-App, registrieren sie in Ihrem Mandanten und verwenden die Daemon-App, um die erstellte Web-API zu testen.

In diesem Tutorial werden Sie:

  • Registrieren einer Daemon-App
  • Weisen Sie der Daemon-Anwendung eine App-Rolle zu
  • Erstellen Ihrer Daemon-App
  • Führen Sie Ihre Daemon-App aus, um die geschützte Web-API aufzurufen.

Voraussetzungen

Registrieren der Daemonanwendung

Die folgenden Schritte zeigen, wie Sie Ihre Daemon-App im Microsoft Entra Admin Center registrieren:

  1. Melden Sie sich beim Microsoft Entra Admin Center mindestens mit der Rolle Anwendungsentwickler an.

  2. Wenn Sie Zugriff auf mehrere Mandanten haben, verwenden Sie das Einstellungen-Symbol im oberen Menü, um über das Menü Verzeichnisse + Abonnements zu Ihrem externen Mandanten zu wechseln.

  3. Navigieren Sie zu Entra ID>App-Registrierungen.

  4. Wählen Sie + Neue Registrierung aus.

  5. Geben Sie auf der daraufhin angezeigten Seite Anwendung registrieren die Registrierungsinformationen Ihrer Anwendung ein:

    1. Geben Sie im Abschnitt Name einen aussagekräftigen Anwendungsnamen ein, der den Benutzern der Anwendung angezeigt werden soll (beispielsweise ciam-client-app).

    2. Wählen Sie unter Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis aus.

  6. Wählen Sie Registrieren aus.

  7. Der Bereich Übersicht der Anwendung wird angezeigt, wenn die Registrierung abgeschlossen ist. Notieren Sie die Verzeichnis-ID (Mandanten-ID) und die Anwendungs-ID (Client-ID), die in Ihrem Anwendungsquellcode verwendet werden sollen.

Erstellen Sie einen geheimen Clientschlüssel für die registrierte Anwendung. Die Anwendung verwendet den geheimen Clientschlüssel, um seine Identität zu beweisen, wenn er Token anfordert:

  1. Wählen Sie auf der Seite " App-Registrierungen " die Anwendung aus, die Sie erstellt haben (z. B. den geheimen Web-App-Clientschlüssel), um die Zugehörige Übersichtsseite zu öffnen.
  2. Wählen Sie unter Verwalten die Optionen Zertifikate und Geheimnisse>Geheime Clientschlüssel>Neuer geheimer Clientschlüssel aus.
  3. Geben Sie im Feld "Beschreibung " eine Beschreibung für den geheimen Clientschlüssel ein (z. B. geheimer Web-App-Clientschlüssel).
  4. Wählen Sie unter Gültig bis einen Gültigkeitszeitraum für den geheimen Schlüssel (gemäß den jeweiligen Sicherheitsregeln Ihrer Organisation) und dann Hinzufügen aus.
  5. Notieren Sie den Wert des Geheimnisses. Sie verwenden diesen Wert für die Konfiguration in einem späteren Schritt. Der Wert des Geheimnisses wird nicht noch mal angezeigt und kann nicht anderweitig abgerufen werden, nachdem Sie die Seite Zertifikate & Geheimnisse verlassen haben. Stellen Sie sicher, dass Sie es aufzeichnen.

Weisen Sie der Daemon-Anwendung eine App-Rolle zu

Anwendungen, die sich selbst authentifizieren, ohne dass ein Benutzer App-Berechtigungen benötigt (auch als Rollen bezeichnet). Mit diesen Berechtigungen kann die App selbst direkt auf Ressourcen zugreifen. Wenn wir die API jedoch mit einem angemeldeten Benutzer testen würden, würden wir delegierte Berechtigungen (Bereiche) zuweisen. Delegierte Berechtigungen ermöglichen es der App, im Namen des Benutzers zu handeln, beschränkt auf die Zugriffsrechte des Benutzers. Führen Sie die folgenden Schritte aus, um der Daemon-App Anwendungsberechtigungen zuzuweisen:

  1. Wählen Sie auf der Seite Anwendungsregistrierungen die von Ihnen erstellte Anwendung (z. B. ciam-client-app) aus.

  2. Wählen Sie unter Verwalten die Option API-Berechtigungen.

  3. Wählen Sie unter Konfigurierte Berechtigungen die Option Berechtigung hinzufügen aus.

  4. Wählen Sie die Registerkarte Von meiner Organisation verwendete APIs aus.

  5. Wählen Sie in der Liste der APIs die API aus, z. B. ciam-ToDoList-api.

  6. Wählen Sie die Option Anwendungsberechtigungen aus. Wir wählen diese Option aus, weil sich die App nicht im Namen eines Benutzers oder einer Benutzerin, sondern selbst anmeldet.

  7. Wählen Sie in der Berechtigungsliste TodoList.Read.All, ToDoList.ReadWrite.All aus (verwenden Sie bei Bedarf das Suchfeld).

  8. Wählen Sie die Schaltfläche Berechtigungen hinzufügen aus.

  9. An diesem Punkt haben Sie die Berechtigungen ordnungsgemäß zugewiesen. Da die Daemon-App jedoch keine Interaktion mit Benutzerinnen oder Benutzern zulässt, können die Benutzerinnen und Benutzer selbst diesen Berechtigungen nicht zustimmen. Um dieses Problem zu beheben, müssen Sie als Administrator im Namen aller Benutzer im Mandanten diesen Berechtigungen zustimmen:

    1. Wählen Sie Administratorzustimmung für <Name Ihres Mandanten> erteilen und dann Ja aus.
    2. Wählen Sie Aktualisieren aus, und vergewissern Sie sich, dass für beide Berechtigungen unter < der Status Erteilt für >Name Ihres Mandanten angezeigt wird.

Erstellen einer Daemon-App

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

    dotnet new console -o MyTestApp
    cd MyTestApp
    
  2. Installieren Sie MSAL.NET, um die Behandlung der Authentifizierung zu unterstützen, indem Sie den folgenden Befehl ausführen:

    dotnet add package Microsoft.Identity.Client
    
  3. Führen Sie Ihr API-Projekt aus, und notieren Sie sich den Port, an dem es ausgeführt wird.

  4. Öffnen Sie die Datei Program.cs, und ersetzen Sie den Code „Hello world“ durch den folgenden Code.

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var response = await client.GetAsync("http://localhost:<your-api-port>/api/todolist);
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    Navigieren Sie zum Stammverzeichnis der Daemon-App, und führen Sie die App mit dem Befehl dotnet run aus. Dieser Code sendet eine Anforderung ohne Zugriffstoken. Sie sollten die Zeichenfolge Ihre Antwort ist: Nicht autorisiert auf Ihrer Konsole sehen.

  5. Entfernen Sie den Code in Schritt 4, und ersetzen Sie ihn durch Folgendes, um Ihre API zu testen, indem Sie eine Anforderung mit einem gültigen Zugriffstoken senden. Diese Dienstprogramm-App verwendet den Client-Credentials-Flow, um ein Zugriffstoken zu beziehen, da sie sich ohne Benutzerinteraktion authentifiziert.

    using Microsoft.Identity.Client;
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var clientId = "<your-daemon-app-client-id>";
    var clientSecret = "<your-daemon-app-secret>";
    var scopes = new[] {"api://<your-web-api-application-id>/.default"};
    var tenantId = "<your-tenant-id>";     //Use in workforce tenant configuration
    var tenantName = "<your-tenant-name>"; //Use in external tenant configuration
    var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration 
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync();
    Console.WriteLine($"Access Token: {result.AccessToken}");
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist");
    var content = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine("Your response is: " + response.StatusCode);
    Console.WriteLine(content);
    
  6. Ersetzen Sie die Platzhalter im Code durch Ihre Daemon-App-Client-ID, den geheimen Schlüssel, die Web-API-Anwendungs-ID und den Mandantennamen.

    • Verwenden Sie für externe Mandanten die Autorität im Format: "https://{tenantName}.ciamlogin.com/"
    • Verwenden Sie für Mitarbeitendenmandanten die Autorität im Format: "https://login.microsoftonline.com/{tenantId}"
  7. Navigieren Sie zum Stammverzeichnis der Daemon-App, und führen Sie die App mit dem Befehl dotnet run aus. Dieser Code sendet eine Anforderung mit einem gültigen Zugriffstoken. Die Zeichenfolge Ihre Antwort lautet: OK sollte auf Ihre Konsole aufgedruckt sein.