Delen via


Quickstart: Een token verkrijgen en Microsoft Graph API aanroepen vanuit een Java-console-app met behulp van de identiteit van de app

Welkom. Dit is waarschijnlijk niet de pagina die u verwachtte te zien. Terwijl we aan een oplossing voor dit probleem werken, kunt u met deze koppeling naar het juiste artikel gaan:

Quickstart: Een token verkrijgen en Microsoft Graph aanroepen vanuit een Java-daemon-app

Onze excuses voor het ongemak en bedankt voor uw geduld tijdens onze inspanningen om dit probleem op te lossen.

In deze quickstart downloadt u een codevoorbeeld en voert u dit uit. Het codevoorbeeld laat zien hoe u met een Java-toepassing een toegangstoken kunt krijgen, met behulp van de app-id, om de Microsoft Graph API aan te roepen en een lijst met gebruikers weer te geven in de map. Het codevoorbeeld laat zien hoe een taak of Windows-service zonder toezicht kan worden uitgevoerd met een toepassings-id, in plaats van een gebruikers-id.

Vereisten

Als u dit voorbeeld wilt uitvoeren, hebt u het volgende nodig:

De quickstart-app downloaden en configureren

Stap 1: De toepassing configureren in de Azure-portal

Om ervoor te zorgen dat het codevoorbeeld voor deze quickstart werkt, moet u een clientgeheim maken en de toepassingstoestemming User.Read.All van Graph API toevoegen.

Al geconfigureerd Uw toepassing is geconfigureerd met deze kenmerken.

Stap 2: Het Java-project downloaden

Notitie

Enter_the_Supported_Account_Info_Here

Als u op dit moment probeert de toepassing uit te voeren, krijgt u de foutmelding HTTP 403: verboden: Insufficient privileges to complete the operation. Deze fout treedt op omdat elke app-enige machtiging beheerderstoestemming vereist: een cloudtoepassingsbeheerder van uw directory moet toestemming geven voor uw toepassing. Selecteer een van de opties hieronder, afhankelijk van uw rol:

Beheerder van de cloudtoepassing

Als u een cloudtoepassingsbeheerder van uw tenant bent, gaat u naar de pagina API-machtigingen en selecteert u Beheerderstoestemming verlenen voor Enter_the_Tenant_Name_Here.

Standaardgebruiker

Als u een standaardgebruiker van uw tenant bent, moet u een cloudtoepassingsbeheerder vragen om beheerderstoestemming te verlenen voor uw toepassing. Daarvoor verstrekt u de volgende URL aan uw beheerder:

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

Stap 4: De toepassing uitvoeren

U kunt het voorbeeld rechtstreeks testen door de hoofdmethode van ClientCredentialGrant.java uit te voeren vanuit uw IDE.

Vanuit de shell of vanaf de opdrachtregel:

$ mvn clean compile assembly:single

Hiermee wordt een msal-client-credential-secret-1.0.0.jar-bestand gegenereerd in uw map /targets. Voer dit uit met behulp van het uitvoerbare Java-bestand, zoals hieronder:

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

Nadat de toepassing is uitgevoerd, moet de lijst met gebruikers in de geconfigureerde tenant worden weergegeven.

Belangrijk

Deze quickstarttoepassing gebruikt een clientgeheim om zichzelf te identificeren als vertrouwelijke client. Omdat het clientgeheim als platte tekst aan uw projectbestanden wordt toegevoegd, wordt u om veiligheidsredenen aangeraden een certificaat te gebruiken in plaats van een clientgeheim voordat u de toepassing als productietoepassing beschouwt. Zie voor meer informatie over het gebruik van een certificaat deze instructies in dezelfde GitHub-opslagplaats voor dit voorbeeld, maar in de tweede map msal-client-credential-certificate.

Meer informatie

MSAL Java

MSAL Java is de bibliotheek die wordt gebruikt voor het aanmelden van gebruikers en de aanvraagtokens die worden gebruikt voor toegang tot een API die is beveiligd via het Microsoft-identiteitsplatform. Zoals beschreven, worden met deze snelstart tokens aangevraagd met behulp van de eigen identiteit van de toepassing in plaats van gedelegeerde machtigingen. De verificatiestroom die in dit voorbeeld wordt gebruikt, staat bekend als de oauth-stroom voor clientreferenties. Zie dit artikel voor meer informatie over het gebruik van MSAL Java met daemonapps.

Voeg MSAL4J toe aan uw toepassing met behulp van Maven of Gradle om uw afhankelijkheden te beheren door de volgende wijzigingen aan te brengen in het bestand pom.xml (Maven) of build.gradle (Gradle) van de toepassing.

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 initialiseren

Voeg een verwijzing toe aan MSAL voor Java door de volgende code toe te voegen bovenaan het bestand waarin u MSAL4J gaat gebruiken:

import com.microsoft.aad.msal4j.*;

Vervolgens initialiseert u MSAL met de volgende code:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Hierin: Beschrijving
CLIENT_SECRET Het clientgeheim is dat voor de toepassing in Azure-portal wordt gemaakt.
CLIENT_ID Is de Toepassings-id (client-id) voor de toepassing die is geregistreerd in de Azure-portal. U vindt deze waarde op de pagina Overzicht in de Azure-portal.
AUTHORITY Het STS-eindpunt voor de gebruiker voor verificatie. Dat is meestal https://login.microsoftonline.com/{tenant} voor de openbare cloud, waarbij {tenant} de naam van uw tenant of uw tenant-id is.

Tokens aanvragen

Als u een token wilt aanvragen met behulp van de identiteit van de app, gebruikt u de acquireToken-methode:

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;
Hierin: Beschrijving
SCOPE De aangevraagde bereiken bevat. Voor vertrouwelijke clients moet hiervoor de indeling worden gebruikt die vergelijkbaar is met {Application ID URI}/.default om aan te geven dat de aangevraagde bereiken dezelfde zijn die statisch zijn gedefinieerd in het app-object dat is ingesteld in de Azure-portal (voor Microsoft Graph verwijst {Application ID URI} naar https://graph.microsoft.com). Voor aangepaste web-API's {Application ID URI} wordt gedefinieerd onder de sectie Een API beschikbaar maken in App-registraties in de Azure Portal.

Help en ondersteuning

Als u hulp nodig hebt, een probleem wilt melden of meer informatie wilt over uw ondersteuningsopties, raadpleegt u Hulp en ondersteuning voor ontwikkelaars.

Volgende stappen

Zie de landingspagina van het scenario voor meer informatie over daemontoepassingen.