Konfigurieren von Daemon-Apps, die Web-APIs aufrufen

Gilt für: Grüner Kreis mit einem weißen Häkchen, der anzeigt, dass der folgende Inhalt für Workforce-Mandanten gilt. Workforce-Mandanten (Weitere Informationen)

Erfahren Sie, wie Sie den Code Ihrer Daemonanwendung konfigurieren können, die Web-APIs aufruft.

Microsoft-Bibliotheken zur Unterstützung von Daemon-Apps

Die folgenden Microsoft-Bibliotheken unterstützen Daemon-Apps:

Sprache / Framework Projekt auf
GitHub
Paket Erste Schritte
gestartet
Anmelden von Benutzern Zugriff auf Web-APIs Allgemein verfügbar (Generally Available, GA) oder
Öffentliche Vorschau1
.NET MSAL.NET Microsoft.Identity.Client Schnellstart Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern GA
Java MSAL4J msal4j Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern GA
Node MSAL-Knoten msal-node Schnellstart Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern GA
Python MSAL-Python msal-python Schnellstart Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern GA

1Universelle Lizenzbedingungen für Onlinedienste gelten für Bibliotheken in der öffentlichen Vorschauversion.

Konfigurieren der Autorität

Daemonanwendungen verwenden Anwendungsberechtigungen anstelle von delegierten Berechtigungen. Daher kann ihr unterstützter Kontotyp kein Konto in einem Organisationsverzeichnis und kein persönliches Microsoft-Konto (z. B. Skype, Xbox, Outlook.com) sein. Für ein persönliches Microsoft-Konto gibt es keinen Mandantenadministrator, der einer Daemonanwendung die Zustimmung erteilen kann. Sie müssen accounts in my organization (Konten in meiner Organisation) oder accounts in any organization (Konten in allen Organisationen) auswählen.

Die in der Anwendungskonfiguration angegebene Autorität sollte Ihre Mandanten-ID oder einen Domänennamen enthalten, der Ihrer Organisation zugeordnet ist.

Auch wenn Sie ein mehrinstanzenfähiges Tool bereitstellen möchten, sollten Sie bei diesem Flow eine Mandanten-ID oder einen Domänennamen verwenden und nichtcommon oder organizations, da der Dienst nicht zuverlässig ableiten kann, welcher Mandant verwendet werden soll.

Konfigurieren und Instanziieren der Anwendung

In den Microsoft Authentication Libraries (MSAL) werden die Clientanmeldeinformationen (Geheimnis oder Zertifikat) als Parameter beim Erstellen der vertraulichen Clientanwendung übergeben.

Wichtig

Auch wenn Ihre Anwendung eine Konsolenanwendung ist, die als Dienst ausgeführt wird, muss sie eine vertrauliche Clientanwendung sein, wenn sie eine Daemonanwendung ist.

Konfigurationsdatei

Die Konfigurationsdatei definiert Folgendes:

  • Die Cloudinstanz und die Mandanten-ID, die zusammen die Autorität bilden.
  • Die Client-ID, die Sie bei der Anwendungsregistrierung erhalten haben
  • Ein geheimer Clientschlüssel oder ein Zertifikat

Hier ist ein Beispiel für die Definition der Konfiguration in einer appsettings.json Beispielkonfigurationsdatei. Dieses Beispiel stammt aus dem Codebeispiel .NET-Konsolen-Daemon auf GitHub.

{
    "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]"
            }
        ]
    }
}

Sie stellen ein Zertifikat anstelle des geheimen Clientschlüssels oder der Anmeldeinformationen des Workloadidentitätsverbunds bereit.

Die MSAL-Anwendung instanziieren

Sie müssen zum Instanziieren der MSAL-Anwendung das MSAL-Paket hinzufügen, darauf verweisen oder es importieren (abhängig von der Sprache).

Die Konstruktion unterscheidet sich je nach Verwendung von geheimen Clientschlüsseln oder Zertifikaten (oder als erweitertes Szenario mit signierten Assertionen).

Auf das Paket verweisen

Verweisen Sie im Anwendungscode auf das MSAL-Paket.

Fügen Sie Ihrer Anwendung das NuGet-Paket Microsoft.Identity.Web.TokenAcquisition hinzu. Wenn Sie Microsoft Graph aufrufen möchten, fügen Sie alternativ das Paket Microsoft.Identity.Web.GraphServiceClient hinzu. Ihr Projekt könnte wie folgt aussehen. Die Datei appsettings.json muss in das Ausgabeverzeichnis kopiert werden.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

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

Fügen Sie in der Datei „Program.cs“ in Ihrem Code eine using-Anweisung hinzu, um auf „Microsoft.Identity.Web“ zu verweisen.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Instanziieren Sie die vertrauliche Clientanwendung mit einem Clientgeheimnis

Im Folgenden finden Sie den Code zum Instanziieren der vertraulichen Clientanwendung mit einem geheimen Clientschlüssel:

Im folgenden Beispiel wird die vertrauliche Clientanwendung mithilfe eines geheimen Clientschlüssels mit Microsoft erstellt. Identity.Web:

   class Program
    {
        static async Task Main(string[] _)
        {
            // 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();

            // ...
        }
    }

Die Konfiguration wird aus appsettings.json gelesen:

Instanziieren Sie die vertrauliche Clientanwendung mit einem Clientzertifikat

Im Folgenden finden Sie den Code zum Erstellen einer Anwendung mit einem Zertifikat:

Der Anwendungskonstruktionscode ist identisch mit dem Clientschlüsselbeispiel. Der einzige Unterschied besteht darin, dass das Zertifikat in der Konfiguration anstelle eines geheimen Schlüssels beschrieben wird. Es gibt viele Möglichkeiten, das Zertifikat abzurufen. Weitere Informationen finden Sie unter Verwenden Sie Zertifikate mit Microsoft Identity Web. Das folgende Konfigurationsbeispiel zeigt, wie Sie Ihr Zertifikat aus Azure Key Vault abrufen. Die Microsoft-Identität delegiert an „DefaultAzureCredential“ der Azure-Identität und verwendet eine verwaltete Identität, sofern verfügbar, um über KeyVault auf das Zertifikat zuzugreifen. Sie können Ihre Anwendung lokal debuggen, da DefaultAzureCredential dann Ihre Entwickleranmeldeinformationen verwendet.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

Erweitertes Szenario: Instanziieren der vertraulichen Clientanwendung mit Clientassertionen

Zusätzlich zur Verwendung eines geheimen Clientschlüssels oder Zertifikats können vertrauliche Clientanwendungen ihre Identität auch mithilfe von Client-Assertionen nachweisen. Ausführliche Informationen finden Sie unter CredentialDescription.

Nächste Schritte

Fahren Sie mit dem nächsten Artikel in diesem Szenario fort: Abrufen eines Tokens für die App.