Guida introduttiva: Acquisire un token e chiamare Microsoft Graph da un'app daemon di Java
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
Registrare e scaricare l'app della guida introduttiva
Suggerimento
La procedura descritta in questo articolo può variare leggermente in base al portale di partenza.
Passaggio 1: Registrare l'applicazione
Per registrare l'applicazione e aggiungere manualmente le informazioni di registrazione dell'app alla soluzione, seguire questa procedura:
- Accedere all'interfaccia di amministrazione di Microsoft Entra almeno come sviluppatore di applicazioni.
- Se si ha accesso a più tenant, usare l'icona Impostazioni nel menu in alto per passare al tenant in cui si vuole registrare l'applicazione dal menu Directory e sottoscrizioni.
- Passare a Identità>Applicazioni>Registrazioni applicazioni.
- Seleziona Nuova registrazione.
- In Nome immettere un nome per l'applicazione, ad esempio
Daemon-console
. Tale nome, che potrebbe essere visualizzato dagli utenti dell'app, può essere modificato in un secondo momento. - Selezionare Registra.
- In Gestisci, selezionare Certificati e segreti.
- In Segreti client selezionare Nuovo segreto client, immettere un nome e quindi selezionare Aggiungi. Registrare il valore del segreto in una posizione sicura per usarlo in un passaggio successivo.
- In Gestisci selezionare Autorizzazioni API>Aggiungi un'autorizzazione. Selezionare Microsoft Graph.
- Seleziona Autorizzazioni applicazione.
- Nel nodo Utente selezionare User.Read.All, quindi selezionare Aggiungi autorizzazioni.
Passaggio 2: Scaricare il progetto Java
Scaricare il progetto daemon Java
Passaggio 3: Configurare il progetto Java
- Estrarre il file ZIP in una cartella locale vicina alla radice del disco, ad esempio
C:\Azure-Samples
. - Spostarsi alla sottocartella
msal-client-credential-secret
. - Modificare
src\main\resources\application.properties
e sostituire i valori dei campiAUTHORITY
,CLIENT_ID
eSECRET
con il frammento di codice seguente:
AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
CLIENT_ID=Enter_the_Application_Id_Here
SECRET=Enter_the_Client_Secret_Here
Dove:
Enter_the_Application_Id_Here
è l'ID applicazione (client) per l'applicazione registrata.Enter_the_Tenant_Id_Here
- sostituire questo valore con l'ID tenant o il nome del tenant (ad esempio, contoso.microsoft.com).Enter_the_Client_Secret_Here
: sostituire questo valore con il segreto client creato nel passaggio 1.
Suggerimento
Per trovare i valori di ID applicazione (client) e ID della directory (tenant), passare alla pagina Panoramica dell'app. Per generare una nuova chiave, passare alla pagina Certificati e segreti.
Passaggio 4: 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é le autorizzazioni solo per app richiedono il consenso amministratore. È quindi necessario che un Amministratore Globale della directory conceda il consenso all'applicazione. Selezionare una delle opzioni seguenti in base al ruolo:
Amministratore del tenant globale
Gli amministratori del tenant globali devono passare alla pagina Autorizzazioni API in Registrazioni app e selezionare Concedi consenso amministratore per {nome del tenant} (dove {nome del tenant} è il nome della directory).
Utente standard
Gli utenti standard del tenant devono chiedere a un Amministratore Globale 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
Dove:
Enter_the_Tenant_Id_Here
: sostituire questo valore con l'ID tenant o il nome del tenant (ad esempio, contoso.microsoft.com)Enter_the_Application_Id_Here
è l'ID applicazione (client) per l'applicazione registrata.
Passaggio 5: 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. |
CLIENT_ID |
È l'ID applicazione (client) per l'applicazione registrata. Questo valore è riportato nella pagina Panoramica dell'app. |
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 (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.