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

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.

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

Vereisten

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

De snelstart-app registreren en downloaden

Tip

Stappen in dit artikel kunnen enigszins variƫren op basis van de portal waaruit u begint.

Stap 1: De toepassing registreren

Volg deze stappen om de toepassing te registreren en de registratiegegevens van de app handmatig toe te voegen aan uw oplossing:

  1. Meld u als toepassingsontwikkelaar aan bij het Microsoft Entra-beheercentrum.
  2. Als u toegang hebt tot meerdere tenants, gebruikt u het pictogram Instellingen in het bovenste menu om over te schakelen naar de tenant waarin u de toepassing wilt registreren in het menu Mappen en abonnementen.
  3. Blader naar toepassingsregistraties voor identiteitstoepassingen>>.
  4. Selecteer Nieuwe registratie.
  5. Voer een Naam in voor de toepassing, bijvoorbeeld Daemon-console. Gebruikers van uw app kunnen de naam zien. U kunt deze later wijzigen.
  6. Selecteer Registreren.
  7. Selecteer onder Beheren de optie Certificaten en geheimen.
  8. Selecteer onder Clientgeheimen de optie Nieuw clientgeheim. Voer een naam in en selecteer vervolgens Toevoegen. Noteer de waarde voor het geheim op een veilige locatie, voor gebruik in een latere stap.
  9. Selecteer onder Beheren achtereenvolgens API-machtigingen>Een machtiging toevoegen. Selecteer Microsoft Graph.
  10. Selecteer Toepassingstoestemming.
  11. Selecteer onder het knooppunt Gebruiker de optie User.Read.All. Selecteer vervolgens Machtigingen toevoegen.

Stap 2: Het Java-project downloaden

Het Java-deamonproject downloaden

Stap 3: Het Java-project configureren

  1. Pak het zip-bestand uit naar een lokale map dicht bij de hoofdmap van de schijf, zoals C:\Azure-Samples.
  2. Navigeer naar de msal-client-credential-secret submap.
  3. Bewerk src\main\resources\application.properties en vervang de waarden van de veldenCLIENT_IDAUTHORITY, en SECRET door het volgende fragment:
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

Hierin:

  • Enter_the_Application_Id_Here: is de toepassings-id (client-id) voor de toepassing die u hebt geregistreerd.
  • Enter_the_Tenant_Id_Here: vervang deze waarde door de Tenant-id of Tenantnaam (bijvoorbeeld contoso.microsoft.com).
  • Enter_the_Client_Secret_Here: vervang deze waarde door het clientgeheim dat is gemaakt in stap 1.

Tip

Ga naar de overzichtspagina van de appom de waarden van toepassings-id (client-id), map-id (tenant) te vinden. Voor het genereren van een nieuwe sleutel gaat u naar de pagina Certificaten en geheimen.

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 voor elke app-alleen-machtiging Beheer toestemming is vereist: een globale Beheer istrator van uw directory moet toestemming geven voor uw toepassing. Selecteer een van de opties hieronder, afhankelijk van uw rol:

Globale tenantbeheerder

Als u een globale tenantbeheerder bent, gaat u naar de pagina API-machtigingen in App-registraties en selecteert u Beheerderstoestemming verlenen voor {Tenant Name} (waarbij {Tenant name} de naam van uw directory is).

Standaardgebruiker

Als u een standaardgebruiker van uw tenant bent, moet u een globale Beheer istrator 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

Hierin:

  • Enter_the_Tenant_Id_Here: vervang deze waarde door de Tenant-id of Tenantnaam (bijvoorbeeld contoso.microsoft.com)
  • Enter_the_Application_Id_Here: is de toepassings-id (client-id) voor de toepassing die u hebt geregistreerd.

Stap 5: 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 in uw /targets map gegenereerd. 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 deze instructies in dezelfde GitHub-opslagplaats voor dit voorbeeld voor meer informatie over het gebruik van een certificaat, 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 Is het clientgeheim gemaakt voor de toepassing.
CLIENT_ID Is de toepassings-id (client) voor de geregistreerde toepassing. U vindt deze waarde op de overzichtspagina van de app.
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 dit de indeling gebruiken die vergelijkbaar is met {Application ID URI}/.default het aangeven dat de bereiken die worden aangevraagd de bereiken zijn die statisch zijn gedefinieerd in het app-object (voor Microsoft Graph, {Application ID URI} verwijst 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.

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.