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:
- Java Development Kit (JDK) 8 o versione successiva
- Maven
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.
L'applicazione è configurata con questi attributi.
Passaggio 2: Scaricare il progetto Java
Nota
Enter_the_Supported_Account_Info_Here
Passaggio 3: Consenso amministratore
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 ahttps://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.