Konfigurieren von Daemon-Apps, die Web-APIs aufrufen

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

Microsoft-Bibliotheken unterstützende Daemon-Apps

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

Programmiersprache/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 Allgemein verfügbar
Java MSAL4J msal4j Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern Allgemein verfügbar
Node MSAL Node msal-node Schnellstart Bibliothek kann keine ID-Token für die Benutzeranmeldung anfordern Bibliothek kann Zugriffstoken für geschützte Web-APIs anfordern Allgemein verfügbar
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 Allgemein verfügbar

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

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. Es gibt keinen Mandantenadministrator, der der Daemonanwendung für persönliche Microsoft-Konten Einwilligung erteilen könnte. 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 über einen Mandanten verfügen (eine Mandanten-ID oder ein Domänennamen, die zu Ihrer Organisation gehören).

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

Die Clientanmeldeinformationen in MSAL-Bibliotheken (Geheimnis oder Zertifikat) werden als Parameter der vertraulichen Clientanwendungskonstruktion ü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 finden Sie ein Beispiel für die Definition der Konfiguration in der Datei appsettings.json. 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.

Instanziierung der MSAL-Anwendung

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).

Verweisen auf das Paket

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 der vertraulichen Clientanwendung mit einem geheimen Clientschlüssel

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

   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 der vertraulichen Clientanwendung mit einem Clientzertifikat

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

Der Code selbst ist identisch. Das Zertifikat wird in der Konfiguration beschrieben. Es gibt viele Möglichkeiten, das Zertifikat abzurufen. Einzelheiten hierzu finden Sie unter https://aka.ms/ms-id-web-certificates. Hier erfahren Sie, wie Sie Ihr Zertifikat aus KeyVault 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 sie 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.