Schnellstart: Abrufen eines Tokens und Aufrufen der Microsoft Graph-API über eine Java-Konsolen-App anhand der Identität der 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 der Microsoft Graph-API aus einer Java-Daemon-App
Wir entschuldigen uns für die Unannehmlichkeiten und bitten Sie um Geduld, während wir an einer Lösung arbeiten.
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.
Voraussetzungen
Für dieses Beispiel benötigen Sie Folgendes:
- Java Development Kit (JDK) 8 oder höher
- Maven
Herunterladen und Konfigurieren der Schnellstart-App
Schritt 1: Konfigurieren der Anwendung im Azure-Portal
Damit das Codebeispiel für diese 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)
Ihre Anwendung ist mit diesen Attributen konfiguriert.
Schritt 2: Herunterladen des Java-Projekts
Hinweis
Enter_the_Supported_Account_Info_Here
Schritt 3: Administratorzustimmung
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 Cloudanwendungsadministrator Ihres Verzeichnisses muss der Anwendung zustimmen. Wählen Sie je nach Ihrer Rolle eine der unten angegebenen Optionen aus:
Cloudanwendungsadministrator
Wenn Sie ein Cloudanwendungsadministrator Ihres Mandanten sind, wechseln Sie zur Seite API-Berechtigungen, und wählen Sie Administratoreinwilligung für Enter_the_Tenant_Name_Here erteilen.
Standardbenutzer
Wenn Sie Standardbenutzer Ihres Mandanten sind, müssen Sie einen Cloudanwendungsadministrator 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
Schritt 4: 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 die Datei „msal-client-credential-secret-1.0.0.jar“ im Verzeichnis „/targets“ erstellt. 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 im Azure-Portal erstellt wird. CLIENT_ID
Die Anwendungs-ID (Client) für die im Azure-Portal registrierte Anwendung. Dieser Wert befindet sich im Azure-Portal 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, das im Azure-Portal festgelegt ist, statisch definiert sind (für Microsoft Graph wird für{Application ID URI}
aufhttps://graph.microsoft.com
verwiesen). Für benutzerdefinierte Web-APIs wird{Application ID URI}
im Azure-Portal 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.