Condividi tramite


Avvio rapido: Acquisire un token e chiamare l'API Microsoft Graph da un'app console Java usando l'identità dell'app

Ti diamo il benvenuto! Questa probabilmente non è la pagina che ci si aspettava. Mentre lavoriamo a una correzione, questo collegamento dovrebbe portare all'articolo corretto:

Avvio rapido: Acquisire un token e chiamare Microsoft Graph da un'app daemon di Java

Ci scusiamo per l'inconveniente e ringraziamo per la pazienza mentre lavoriamo per risolvere il problema.

In questa guida introduttiva si scarica e si esegue un esempio di codice che illustra come un'applicazione Java può ottenere un token di accesso usando l'identità dell'app per chiamare l'API Microsoft Graph e visualizzare un elenco di utenti nella directory. L'esempio di codice dimostra come è possibile eseguire un processo o un servizio di Windows automatico con un'identità dell'applicazione invece che con un'identità dell'utente.

Prerequisiti

Per eseguire questo esempio, sono necessari:

Scaricare e configurare l'app della guida introduttiva

Passaggio 1: Configurare l'applicazione nel portale di Azure

Per fare in modo che l'esempio di codice per questo avvio rapido funzioni, è necessario creare un segreto client e aggiungere l'autorizzazione dell'applicazione User.Read.All dell'API Graph.

Configurazione già eseguita L'applicazione è configurata con questi attributi.

Passaggio 2: Scaricare il progetto Java

Nota

Enter_the_Supported_Account_Info_Here

Se si prova a eseguire l'applicazione a questo punto, si riceverà l'errore HTTP 403 - Accesso negato: Insufficient privileges to complete the operation. Questo errore si verifica perché qualsiasi autorizzazione solo app richiede il consenso amministratore: un amministratore di applicazioni cloud della directory deve fornire il consenso all'applicazione. Selezionare una delle opzioni seguenti in base al ruolo:

Amministratore di applicazioni cloud

Se si è un amministratore di applicazioni cloud del tenant, passare alla pagina Autorizzazioni API selezionare Concedi consenso amministratore per Enter_the_Tenant_Name_Here.

Utente standard

Se si è un utente standard del tenant, è necessario chiedere a un amministratore di applicazioni cloud di concedere il consenso amministratore per l'applicazione. A tale scopo, assegnare l'URL seguente all'amministratore:

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

Passaggio 4: Eseguire l'applicazione

È possibile testare l'esempio direttamente eseguendo il metodo principale di ClientCredentialGrant.java dall'IDE.

Dalla shell o della riga di comando:

$ mvn clean compile assembly:single

Verrà generato un file msal-client-credential-secret-1.0.0.jar nella directory /targets. Eseguire questa operazione usando il file eseguibile Java come illustrato di seguito:

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

Dopo l'esecuzione, l'applicazione deve visualizzare l'elenco degli utenti nel tenant configurato.

Importante

Questa applicazione della guida introduttiva usa un segreto client per identificarsi come client riservato. Poiché il segreto client viene aggiunto come testo normale ai file di progetto, per motivi di sicurezza è consigliabile usare un certificato anziché un segreto client prima di considerare l'applicazione come applicazione di produzione. Per altre informazioni su come usare un certificato, vedere queste istruzioni nello stesso repository GitHub di questo esempio, ma nella seconda cartella msal-client-credential-certificate.

Ulteriori informazioni

MSAL Java

MSAL Java è la libreria usata per concedere l'accesso agli utenti e richiedere i token usati per accedere a un'API protetta da Microsoft Identity Platform. Come descritto, questo avvio rapido richiede i token usando l'identità propria dell'applicazione invece delle autorizzazioni delegate. Il flusso di autenticazione usato in questo caso è noto come flusso delle credenziali client OAuth. Per altre informazioni su come usare MSAL Java con le app daemon, vedere questo articolo.

Aggiungere MSAL4J all'applicazione usando Maven o Gradle per gestire le dipendenze apportando le modifiche seguenti al file pom.xml (Maven) o build.gradle (Gradle) dell'applicazione.

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'

Inizializzazione della libreria MSAL

Aggiungere un riferimento a MSAL per Java aggiungendo il codice seguente all'inizio del file in cui verrà usato MSAL4J:

import com.microsoft.aad.msal4j.*;

Inizializzare quindi la libreria MSAL usando il codice seguente:

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Dove: Descrizione
CLIENT_SECRET È il segreto client creato per l'applicazione nel portale di Azure.
CLIENT_ID ID applicazione (client) dell'applicazione registrata nel portale di Azure. Questo valore è riportato nella pagina Panoramica dell'app nel portale di Azure.
AUTHORITY Endpoint del servizio token di sicurezza per l'utente da autenticare. In genere https://login.microsoftonline.com/{tenant} per il cloud pubblico, dove {tenant} è il nome del tenant o l'ID tenant.

Richiesta di token

Per richiedere un token con l'identità dell'app, usare il metodo 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;
Dove: Descrizione
SCOPE Contiene gli ambiti richiesti. Per i client riservati, dovrebbe essere usato un formato simile a {Application ID URI}/.default per indicare che gli ambiti che vengono richiesti sono quelli definiti in modo statico nell'oggetto app impostato nel portale di Azure. (per Microsoft Graph, {Application ID URI} punta a https://graph.microsoft.com). Per API Web personalizzate, {Application ID URI} è definito nella sezione Esporre un'API in Registrazioni app.

Assistenza e supporto

Se è necessaria assistenza, si vuole segnalare un problema o si vogliono ottenere informazioni sulle opzioni di supporto, vedere Assistenza e supporto per gli sviluppatori.

Passaggi successivi

Per altre informazioni sulle applicazioni daemon, vedere la pagina di destinazione dello scenario.