Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: Mitarbeitermandanten
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
Öffnen Sie Ihr Terminal und navigieren Sie zu dem Ordner, in dem Sie Ihr Projekt speichern möchten.
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.
Erstellen Sie die Datei appsettings.json im Stammordner der App.
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.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
Öffnen Sie die program.cs Datei im Code-Editor, und löschen Sie deren Inhalt.
Fügen Sie Ihre Pakete zur Datei hinzu.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web;
Erstellen Sie die Tokenakquisitionsinstanz. Verwenden Sie die
GetDefaultInstance
Methode derTokenAcquirerFactory
PaketklasseMicrosoft.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();
Konfigurieren Sie die Anwendungsoptionen, die aus der Konfiguration gelesen werden sollen, und fügen Sie den
DownstreamApi
Dienst hinzu. DerDownstreamApi
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.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
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.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 derIDownstreamApi
Schnittstelle wird verwendet, um den Endpunkt aufzurufen. Die App ruft im eigenen Auftrag an. Die Methode gibt einHttpResponseMessage
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.