Snabbstart: Hämta en token och anropa Microsoft Graph från en Java-daemon-app

I den här snabbstarten laddar du ned och kör ett kodexempel som visar hur ett Java-program kan hämta en åtkomsttoken med hjälp av appens identitet för att anropa Microsoft Graph API och visa en lista över användare i katalogen. Kodexemplet visar hur ett obevakat jobb eller En Windows-tjänst kan köras med en programidentitet i stället för en användares identitet.

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

Förutsättningar

Om du vill köra det här exemplet behöver du:

Registrera och ladda ned snabbstartsappen

Dricks

Stegen i den här artikeln kan variera något beroende på vilken portal du börjar från.

Steg 1: Registrera programmet

Du registrerar programmet och lägger till appens registreringsinformationen i lösningen manuellt med hjälp av följande steg:

  1. Logga in på administrationscentret för Microsoft Entra som minst programutvecklare.
  2. Om du har åtkomst till flera klienter använder du ikonen Inställningar på den översta menyn för att växla till den klientorganisation där du vill registrera programmet från menyn Kataloger + prenumerationer.
  3. Bläddra till Programregistreringar för identitetsprogram>>.
  4. Välj Ny registrering.
  5. Ange ett namn för ditt program, till exempel Daemon-console. Användare av din app kan se det här namnet och du kan ändra det senare.
  6. Välj Registrera.
  7. Under Hantera väljer du Certifikat och hemligheter.
  8. Under Klienthemligheter väljer du Ny klienthemlighet, anger ett namn och väljer sedan Lägg till. Registrera det hemliga värdet på en säker plats för användning i ett senare steg.
  9. Under Hantera väljer du API-behörigheter>Lägg till en behörighet. Välj Microsoft Graph.
  10. Välj Programbehörigheter.
  11. Under Användarnod väljer du User.Read.All och sedan Lägg till behörigheter.

Steg 2: Ladda ned Java-projektet

Ladda ned Java-daemonprojektet

Steg 3: Konfigurera Java-projektet

  1. Extrahera zip-filen till en lokal mapp nära roten på disken, till exempel C:\Azure-Samples.
  2. Gå till undermappen msal-client-credential-secret .
  3. Redigera src\main\resources\application.properties och ersätt värdena för fälten AUTHORITY, CLIENT_IDoch SECRET med följande kodfragment:
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

Där:

  • Enter_the_Application_Id_Here – är program-ID (klient) för programmet som du har registrerat.
  • Enter_the_Tenant_Id_Here – ersätt det här värdet med klient-ID :t eller klientorganisationens namn (till exempel contoso.microsoft.com).
  • Enter_the_Client_Secret_Here – ersätt det här värdet med klienthemligheten som skapades i steg 1.

Dricks

Om du vill hitta värdena för program-ID(klient)-ID, katalog-ID (klientorganisation) går du till appens översiktssida. Generera en ny nyckel genom att gå till sidan Certifikat och hemligheter.

Om du försöker köra programmet nu får du http 403 – förbjudet fel: Insufficient privileges to complete the operation. Det här felet inträffar eftersom alla appbehörigheter kräver administratörsmedgivande: en global administratör för din katalog måste ge ditt program medgivande. Välj något av alternativen nedan beroende på din roll:

Global innehavaradministratör

Om du är global klientadministratör går du till sidan API-behörigheter i Appregistreringar och väljer Bevilja administratörsmedgivande för {Klientnamn} (där {Klientnamn} är namnet på din katalog).

Standardanvändare

Om du är en standardanvändare av din klientorganisation måste du be en global administratör att bevilja administratörsmedgivande för ditt program. Gör detta genom att ge följande URL till administratören:

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

Där:

  • Enter_the_Tenant_Id_Here – ersätt det här värdet med klient-ID eller klientnamn (t.ex. contoso.microsoft.com)
  • Enter_the_Application_Id_Here – är program-ID (klient) för programmet som du har registrerat.

Steg 5: Köra appen

Du kan testa exemplet direkt genom att köra huvudmetoden för ClientCredentialGrant.java från din IDE.

Från gränssnittet eller kommandoraden:

$ mvn clean compile assembly:single

Då genereras en msal-client-credential-secret-1.0.0.jar fil i katalogen /targets . Kör detta med din körbara Java-fil som nedan:

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

När programmet har körts bör det visa listan över användare i den konfigurerade klientorganisationen.

Viktigt!

Det här snabbstartsprogrammet använder en klienthemlighet för att identifiera sig som en konfidentiell klient. Eftersom klienthemligheten läggs till som oformaterad text till dina projektfiler rekommenderar vi att du av säkerhetsskäl använder ett certifikat i stället för en klienthemlighet innan programmet används som produktionsprogram. Mer information om hur du använder ett certifikat finns i de här anvisningarna på samma GitHub-lagringsplats för det här exemplet, men i den andra mappen MSAL-client-credential-certificate.

Mer information

MSAL Java

MSAL Java är det bibliotek som används för att logga in användare och begära token som används för att komma åt ett API som skyddas av Microsofts identitetsplattform. Enligt beskrivningen begär den här snabbstarten token med hjälp av programmets egen identitet i stället för delegerade behörigheter. Autentiseringsflödet som används i det här fallet kallas för oauth-flöde för klientautentiseringsuppgifter. Mer information om hur du använder MSAL Java med daemon-appar finns i den här artikeln.

Lägg till MSAL4J i ditt program med hjälp av Maven eller Gradle för att hantera dina beroenden genom att göra följande ändringar i programmets pom.xml-fil (Maven) eller build.gradle-fil (Gradle).

I pom.xml:

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

I build.gradle:

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

MSAL-initiering

Lägg till en referens till MSAL för Java genom att lägga till följande kod överst i filen där du ska använda MSAL4J:

import com.microsoft.aad.msal4j.*;

Initiera sedan MSAL med hjälp av följande kod:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Där: beskrivning
CLIENT_SECRET Skapas klienthemligheten för programmet.
CLIENT_ID Är program-ID :t (klient) för det registrerade programmet. Du hittar det här värdet på appens översiktssida.
AUTHORITY STS-slutpunkten för autentisering av användaren. Vanligtvis https://login.microsoftonline.com/{tenant} för offentliga moln, där {tenant} är namnet på din klientorganisation eller ditt klient-ID.

Begära token

Om du vill begära en token med appens identitet använder du metoden acquireToken:

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;
Där: beskrivning
SCOPE Innehåller omfattningarna som begärdes. För konfidentiella klienter bör detta använda formatet som liknar för att {Application ID URI}/.default indikera att de omfång som begärs är de som statiskt definieras i appobjektet (för Microsoft Graph {Application ID URI} pekar på https://graph.microsoft.com). För anpassade webb-API:er {Application ID URI} definieras under avsnittet Exponera ett API i Appregistreringar.

Hjälp och support

Om du behöver hjälp, vill rapportera ett problem eller vill lära dig mer om dina supportalternativ kan du läsa Hjälp och support för utvecklare.

Nästa steg

Mer information om daemonprogram finns på landningssidan för scenariot.