Schnellstart: Abrufen eines Tokens und Aufrufen der Microsoft Graph-API aus einer Java-Daemon-App

In dieser Schnellstartanleitung laden Sie ein Codebeispiel herunter und führen es aus, das zeigt, wie eine Java-Anwendung mithilfe der App-Identität ein Zugriffstoken abrufen kann, um die Microsoft Graph-API aufzurufen und eine Liste mit Benutzern im Verzeichnis anzuzeigen. Das Codebeispiel veranschaulicht, wie ein unbeaufsichtigter Auftrag oder Windows-Dienst mit einer Anwendungsidentität anstelle der Identität eines Benutzers ausgeführt werden kann.

Diagram showing how the sample app generated by this quickstart works.

Voraussetzungen

Für dieses Beispiel benötigen Sie Folgendes:

Registrieren und Herunterladen Ihrer Schnellstart-App

Tipp

Die Schritte in diesem Artikel können je nach dem Portal, mit dem Sie beginnen, geringfügig variieren.

Schritt 1: Registrieren der Anwendung

Führen Sie die folgenden Schritte aus, um Ihre Anwendung zu registrieren und Ihrer Projektmappe manuell die Registrierungsinformationen Ihrer App hinzuzufügen:

  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 Symbol für Einstellungen im oberen Menü, um zum Mandanten zu wechseln, in dem Sie die Anwendung über das Menü Verzeichnisse + Abonnements registrieren möchten.
  3. Navigieren Sie zu Identität>Anwendungen>Anwendungsregistrierungen.
  4. Wählen Sie Neue Registrierung aus.
  5. Geben Sie unter Name einen Namen für Ihre Anwendung ein (beispielsweise Daemon-console). Benutzern Ihrer App wird wahrscheinlich dieser Namen angezeigt. Sie können ihn später ändern.
  6. Wählen Sie Registrieren aus.
  7. Wählen Sie unter Verwalten die Option Zertifikate und Geheimnisse aus.
  8. Wählen Sie unter Geheimer Clientschlüssel die Option Neuer geheimer Clientschlüssel aus, geben Sie einen Namen ein, und wählen Sie dann Hinzufügen aus. Notieren Sie den Wert für den geheimen Schlüssel an einem sicheren Ort, damit Sie ihn in einem späteren Schritt verwenden können.
  9. Wählen Sie unter Verwalten die Optionen API-Berechtigungen>Berechtigung hinzufügen aus. Wählen Sie Microsoft Graph.
  10. Wählen Sie Anwendungsberechtigungen.
  11. Wählen Sie unter dem Knoten Benutzer die Option User.Read.All und dann Berechtigungen hinzufügen aus.

Schritt 2: Herunterladen des Java-Projekts

Laden Sie das Java-Daemon-Projekt herunter.

Schritt 3: Konfigurieren des Java-Projekts

  1. Extrahieren Sie die ZIP-Datei in einem lokalen Ordner in der Nähe des Datenträger-Stammverzeichnisses, wie z. B. C:\Azure-Samples.
  2. Navigieren Sie zum Unterordner msal-client-credential-secret.
  3. Bearbeiten Sie src\main\resources\application.properties, und ersetzen Sie die Werte der Felder AUTHORITY, CLIENT_ID und SECRET durch das folgende Codeschnipsel:
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

Hierbei gilt:

  • Enter_the_Application_Id_Here ist die Anwendungs-ID (Client) für die von Ihnen registrierte Anwendung.
  • Enter_the_Tenant_Id_Here: Ersetzen Sie diesen Wert durch die Mandanten-ID oder den Mandantennamen (z. B. „contoso.microsoft.com“).
  • Enter_the_Client_Secret_Here: Ersetzen Sie diesen Wert durch den geheimen Clientschlüssel, den Sie in Schritt 1 erstellt haben.

Tipp

Die Werte für Anwendungs-ID (Client) und Verzeichnis-ID (Mandant) finden Sie auf der Seite Übersicht der App. Navigieren Sie zum Generieren eines neuen Schlüssels zur Seite Zertifikate & Geheimnisse.

Wenn Sie zu diesem Zeitpunkt versuchen, die Anwendung auszuführen, wird der Fehler HTTP 403 – Verboten angezeigt: Insufficient privileges to complete the operation. Dieser Fehler tritt auf, da für eine nur für die App geltende Berechtigung eine Administratoreinwilligung erforderlich ist: Ein Globaler Admin Ihres Verzeichnisses muss Ihre Anwendung erlauben. Wählen Sie je nach Ihrer Rolle eine der unten angegebenen Optionen aus:

Globaler Mandantenadministrator

Wenn Sie ein globaler Mandantenadministrator sind, navigieren Sie unter App-Registrierungen zur Seite API-Berechtigungen, und wählen Sie Administratorzustimmung für „{Mandantenname}“ erteilen aus. (Hierbei steht „{Mandantenname}“ für den Namen Ihres Verzeichnisses.)

Standardbenutzer

Wenn Sie ein Standardbenutzerkonto auf Ihrem Mandanten haben, müssen Sie einen globalen Admin bitten, die Administratoreinwilligung für Ihre Anwendung zu erteilen. Übermitteln Sie hierzu die folgende URL an Ihren Administrator:

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

Hierbei gilt:

  • Enter_the_Tenant_Id_Here: Ersetzen Sie diesen Wert durch die Mandanten-ID oder den Mandantennamen (z.B. „contoso.microsoft.com“).
  • Enter_the_Application_Id_Here ist die Anwendungs-ID (Client) für die von Ihnen registrierte Anwendung.

Schritt 5: Ausführen der Anwendung

Sie können das Beispiel direkt testen, indem Sie die main-Methode von „ClientCredentialGrant.java“ über Ihre IDE ausführen.

Verwenden Sie in Ihrer Shell oder Befehlszeile Folgendes:

$ mvn clean compile assembly:single

Dadurch wird eine Datei namens msal-client-credential-secret-1.0.0.jar im Verzeichnis /targets generiert. Führen Sie diese mithilfe der ausführbaren Java-Datei wie folgt aus:

$ java -jar msal-client-credential-secret-1.0.0.jar

Nach der Ausführung sollte die Anwendung die Liste der Benutzer im konfigurierten Mandanten anzeigen.

Wichtig

Für die Anwendung in dieser Schnellstartanleitung wird ein Clientgeheimnis verwendet, um sich selbst als vertraulicher Client zu identifizieren. Da das Clientgeheimnis Ihren Projektdateien als Nur-Text hinzugefügt wird, wird aus Sicherheitsgründen empfohlen, ein Zertifikat anstelle eines Clientgeheimnisses zu verwenden, bevor die Anwendung als Produktionsanwendung eingestuft wird. Weitere Informationen zur Verwendung eines Zertifikats finden Sie in diesen Anweisungen im zweiten Ordner (MSAL-client-credential-certificate) des GitHub-Repositorys für dieses Beispiel.

Weitere Informationen

MSAL Java

MSAL Java ist die Bibliothek zum Anmelden von Benutzern und Anfordern von Token, die für den Zugriff auf eine durch Microsoft Identity Platform geschützte API verwendet wird. In dieser Schnellstartanleitung werden wie beschrieben Token angefordert, indem keine delegierten Berechtigungen verwendet werden, sondern die eigene Identität der Anwendung. Der hier genutzte Authentifizierungsablauf wird als OAuth-Ablauf mit Clientanmeldeinformationen bezeichnet. Weitere Informationen zur Verwendung von MSAL Java mit Daemon-Apps finden Sie in diesem Artikel.

Sie können Ihrer Anwendung MSAL4J hinzufügen, indem Sie Maven oder Gradle für die Verwaltung Ihrer Abhängigkeiten verwenden. Hierzu sind in Ihrer Anwendung folgende Änderungen an der Datei „pom.xml“ (Maven) oder „build.gradle“ (Gradle) erforderlich:

In pom.xml:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

In „build.gradle“:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

MSAL-Initialisierung

Fügen Sie einen Verweis auf MSAL für Java hinzu, indem Sie am Anfang der Datei, in der Sie MSAL4J verwenden möchten, den folgenden Code hinzufügen:

import com.microsoft.aad.msal4j.*;

Initialisieren Sie MSAL anschließend mit dem folgenden Code:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Hierbei gilt: Beschreibung
CLIENT_SECRET Der geheime Clientschlüssel, der für die Anwendung erstellt wird.
CLIENT_ID Entspricht der Anwendungs-ID (Client-ID) für die registrierte Anwendung. Dieser Wert befindet sich auf der Seite Übersicht der App.
AUTHORITY Der STS-Endpunkt für den zu authentifizierenden Benutzer. Normalerweise https://login.microsoftonline.com/{tenant} für die öffentliche Cloud, wobei „{tenant}“ der Name Ihres Mandanten bzw. Ihre Mandanten-ID ist.

Anfordern von Token

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

IAuthenticationResult result;
     try {
         SilentParameters silentParameters =
                 SilentParameters
                         .builder(SCOPE)
                         .build();

         // try to acquire token silently. This call will fail since the token cache does not
         // have a token for the application you are requesting an access token for
         result = cca.acquireTokenSilently(silentParameters).join();
     } catch (Exception ex) {
         if (ex.getCause() instanceof MsalException) {

             ClientCredentialParameters parameters =
                     ClientCredentialParameters
                             .builder(SCOPE)
                             .build();

             // Try to acquire a token. If successful, you should see
             // the token information printed out to console
             result = cca.acquireToken(parameters).join();
         } else {
             // Handle other exceptions accordingly
             throw ex;
         }
     }
     return result;
Hierbei gilt: BESCHREIBUNG
SCOPE Enthält die angeforderten Bereiche. Für vertrauliche Clients sollte ein Format wie {Application ID URI}/.default verwendet werden. Hiermit wird angegeben, dass die angeforderten Bereiche diejenigen sind, die im App-Objekt statisch definiert sind (für Microsoft Graph wird für {Application ID URI} auf https://graph.microsoft.com verwiesen). Für benutzerdefinierte Web-APIs wird {Application ID URI} unter App-Registrierungen im Abschnitt Eine API verfügbar machen definiert.

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 auf der Landing Page des Szenarios.