Schnellstart: Abrufen eines Tokens und Aufrufen der Microsoft Graph-API über die Identität einer Konsolen-App

Willkommen! Dies ist wahrscheinlich nicht die Seite, die Sie erwartet haben. Während wir an einer Korrektur arbeiten, sollten Sie über diesen Link zum richtigen Artikel gelangen:

Schnellstart: Abrufen eines Tokens und Aufrufen von Microsoft Graph aus einer .NET-Konsolen-App

Wir entschuldigen uns für die Unannehmlichkeiten und bitten Sie um Geduld, während wir an einer Lösung arbeiten.

In diesem Schnellstart wird anhand eines Codebeispiels gezeigt, wie eine .NET-Konsolenanwendung ein Zugriffstoken abrufen kann, um die Microsoft Graph-API aufzurufen und eine Liste mit Benutzer*innen im Verzeichnis anzuzeigen. Es wird auch veranschaulicht, wie ein Auftrag oder ein Windows-Dienst statt mit einer Benutzeridentität mit einer Anwendungsidentität ausgeführt werden kann. Die Beispielkonsolenanwendung in dieser Schnellstartanleitung ist außerdem eine Daemonanwendung, also eine vertrauliche Clientanwendung.

Voraussetzungen

Mindestanforderung: .NET 6.0 SDK.

Herunterladen und Konfigurieren Ihrer Schnellstart-App

Schritt 1: Konfigurieren Ihrer Anwendung im Azure-Portal

Damit das Codebeispiel in dieser Schnellstartanleitung funktioniert, müssen Sie einen geheimen Clientschlüssel erstellen und die Anwendungsberechtigung User.Read.All aus der Graph-API hinzufügen.

Make these changes for me (Diese Änderungen für mich vornehmen)

Bereits konfiguriert Ihre Anwendung ist mit diesen Attributen konfiguriert.

Schritt 2: Herunterladen des Visual Studio-Projekts

Führen Sie das Projekt mit Visual Studio 2022 aus.

Tipp

Es wird empfohlen, das Archiv in ein Verzeichnis in der Nähe des Stammverzeichnisses Ihres Laufwerks zu extrahieren, um Fehler zu vermeiden, die durch Beschränkungen der Pfadlänge unter Windows verursacht werden.

Hinweis

Enter_the_Supported_Account_Info_Here

Beim Ausführen der Anwendung wird HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation ausgegeben. Dieser Fehler tritt auf, da bei jeder Berechtigung, die nur für eine App gilt, ein Globaler Admin des Verzeichnisses der Anwendung zustimmen muss. Wählen Sie je nach Rolle eine der folgenden Optionen aus.

Globaler Mandantenadministrator

Gehen Sie als globale*r Mandantenadministrator*in wie folgt vor: Navigieren Sie zur Seite API-Berechtigungen, und wählen Sie Administratorzustimmung für Enter_the_Tenant_Name_Here erteilen aus.

Standardbenutzer

Wenn Sie ein Standardbenutzerkonto auf Ihrem Mandanten haben, müssen Sie einen Globalen Admin um die Erteilung der Administratoreinwilligung für die Anwendung bitten. Übermitteln Sie hierzu die folgende URL an den Administrator:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

Möglicherweise wird der Fehler AADSTS50011: No reply address is registered for the application angezeigt, nachdem Sie der App mithilfe der vorherigen URL Ihre Zustimmung erteilt haben. Dieser Fehler tritt auf, weil die Anwendung und die URL keinen Umleitungs-URI haben. Sie können diese Warnmeldung ignorieren.

Schritt 4: Ausführen der Anwendung

Drücken Sie in Visual Studio F5, um die Anwendung auszuführen. Führen Sie die Anwendung andernfalls über eine Eingabeaufforderung, die Konsole oder ein Terminal aus:

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

Informationen zu diesem Code:

  • {ProjectFolder} ist der Ordner, in den Sie die ZIP-Datei extrahieren. z. B. C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

Daraufhin sollte eine Liste der Benutzer in Microsoft Entra ID angezeigt werden.

Für die Anwendung in dieser Schnellstartanleitung wird ein Clientgeheimnis verwendet, um sich selbst als vertraulicher Client zu identifizieren. Der geheime Clientschlüssel wird Ihren Projektdateien als reine Textdatei hinzugefügt. Aus Sicherheitsgründen wird empfohlen, anstelle eines geheimen Clientschlüssels ein Zertifikat zu verwenden, bevor die Anwendung in der Produktionsumgebung verwendet wird. Weitere Informationen zur Verwendung eines Zertifikats finden Sie in diesen Anweisungen.

Weitere Informationen

In diesem Abschnitt erhalten Sie eine Übersicht über den erforderlichen Code für die Benutzeranmeldung. Diese Übersicht kann hilfreich sein, um die Funktionsweise des Codes und die Hauptargumente zu verstehen und zu ermitteln, wie Sie einer vorhandenen .NET-Konsolenanwendung eine Anmeldung hinzufügen.

Funktionsweise des Beispiels

Diagramm: Funktionsweise der in dieser Schnellstartanleitung generierten Beispiel-App

Microsoft.Identity.Web.GraphServiceClient

Die Microsoft Identity Web-Bibliothek (im Paket Microsoft.Identity.Web.TokenAcquisition) wird zum Anfordern von Token für den Zugriff auf eine API verwendet, die durch Microsoft Identity Platform geschützt ist. In dieser Schnellstartanleitung werden Token unter Verwendung der eigenen Identität der Anwendung anstelle der delegierten Berechtigungen angefordert. Der Authentifizierungsflow wird in diesem Fall als OAuth 2.0-Clientanmeldeinformations-Flow bezeichnet. Weitere Informationen dazu, wie Sie MSAL.NET mit einem Clientanmeldeinformations-Flow verwenden, finden Sie in diesem Artikel. Da die Daemon-App in dieser Schnellstartanleitung Microsoft Graph aufruft, installieren Sie das Paket Microsoft.Identity.Web.GraphServiceClient, das automatisch authentifizierte Anforderungen an Microsoft Graph verarbeitet (und auf Microsoft.Identity.Web.TokenAcquisition verweist)

Microsoft.Identity.Web.GraphServiceClient kann durch Ausführen des folgenden Befehls in der Paket-Manager-Konsole von Visual Studio installiert werden:

dotnet add package Microsoft.Identity.Web.GraphServiceClient

Anwendungsinitialisierung

Fügen Sie den Verweis auf Microsoft.Identity.Web hinzu, indem Sie den folgenden Code hinzufügen:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Initialisieren Sie die App dann wie folgt:

// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the 
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();

Dieser Code verwendet die in der Datei „appsettings.json“ definierte Konfiguration:

{
   "AzureAd": {
       "Instance": "https://login.microsoftonline.com/",
       "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
       "ClientId": "[Enter here the ClientId for your application]",
       "ClientCredentials": [
           {
              "SourceType": "ClientSecret",
              "ClientSecret": "[Enter here a client secret for your application]"
           }
       ]
   }
}
Element Beschreibung
ClientSecret Der geheime Clientschlüssel, der für die Anwendung im Azure-Portal erstellt wird
ClientId Die Anwendungs-ID (Client) für die im Azure-Portal registrierte Anwendung. Sie finden diesen Wert im Azure-Portal auf der Seite Übersicht der App.
Instance (Optional) Der Endpunkt der STS-Instanz (Security Token Service, Sicherheitstokendienst) für die zu authentifizierende App. Dies ist in der Regel https://login.microsoftonline.com/ für die öffentliche Cloud.
TenantId Der Name des Mandanten oder die Mandanten-ID.

Weitere Informationen finden Sie in der Referenzdokumentation für ConfidentialClientApplication.

Aufrufen von Microsoft Graph

Verwenden Sie die AcquireTokenForClient-Methode, um ein Token mit der App-Identität anzufordern:

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

Hilfe und Support

Wenn Sie Hilfe benötigen, ein Problem melden möchten oder sich über Ihre Supportoptionen informieren möchten, finden Sie weitere Informationen unter Hilfe und Support für Entwickler.

Nächste Schritte

Weitere Informationen zu Daemon-Anwendungen finden Sie in der Szenarioübersicht: