Autenticare le applicazioni Java ospitate in Azure

Questo articolo illustra in che modo la libreria di identità di Azure supporta l'autenticazione del token Microsoft Entra per le applicazioni ospitate in Azure. Questo supporto è reso possibile tramite un set di TokenCredential implementazioni, descritte in questo articolo.

Questo articolo illustra gli argomenti seguenti:

Per la risoluzione dei problemi di autenticazione relativi alle applicazioni ospitate in Azure, vedere Risolvere i problemi di autenticazione dell'applicazione ospitata in Azure.

Credenziali di Azure predefinite

DefaultAzureCredential è appropriato per la maggior parte degli scenari in cui l'applicazione viene eseguita in definitiva nel cloud di Azure. DefaultAzureCredential combina le credenziali comunemente usate per l'autenticazione durante la distribuzione, con le credenziali usate per l'autenticazione in un ambiente di sviluppo. DefaultAzureCredential tenta di eseguire l'autenticazione tramite i meccanismi seguenti in ordine:

DefaultAzureCredential authentication flow

  • Ambiente: DefaultAzureCredential legge le informazioni sull'account specificate tramite le variabili di ambiente e usarle per l'autenticazione.
  • Identità gestita: se l'applicazione viene distribuita in un host di Azure con identità gestita abilitata, DefaultAzureCredential esegue l'autenticazione con tale account.
  • IntelliJ: se è stata eseguita l'autenticazione tramite Azure Toolkit for IntelliJ, DefaultAzureCredential esegue l'autenticazione con tale account.
  • Visual Studio Code: se è stata eseguita l'autenticazione tramite il plug-in account azure di Visual Studio Code, DefaultAzureCredential esegue l'autenticazione con tale account.
  • Interfaccia della riga di comando di Azure: se è stato autenticato un account tramite il comando dell'interfaccia della riga di comando di Azure az login , DefaultAzureCredential esegue l'autenticazione con tale account.

Configurare DefaultAzureCredential

DefaultAzureCredential supporta un set di configurazioni tramite setter nelle variabili di DefaultAzureCredentialBuilder ambiente o .

  • L'impostazione delle variabili AZURE_CLIENT_IDdi ambiente , AZURE_CLIENT_SECRETe AZURE_TENANT_ID come definito in Variabili di ambiente configura DefaultAzureCredential per l'autenticazione come entità servizio specificata dai valori .
  • L'impostazione .managedIdentityClientId(String) nel generatore o nella variabile AZURE_CLIENT_ID di ambiente consente DefaultAzureCredential di eseguire l'autenticazione come identità gestita definita dall'utente, lasciandole vuote le configura per l'autenticazione come identità gestita assegnata dal sistema.
  • L'impostazione .tenantId(String) nel generatore o nella variabile AZURE_TENANT_ID di ambiente viene configurata DefaultAzureCredential per l'autenticazione in un tenant specifico per la cache dei token condivisi, Visual Studio Code e IntelliJ IDEA.
  • L'impostazione della variabile di ambiente consente di DefaultAzureCredential selezionare AZURE_USERNAME il token memorizzato nella cache dei token condivisi corrispondente.
  • L'impostazione .intelliJKeePassDatabasePath(String) nel generatore viene configurata DefaultAzureCredential per leggere un file KeePass specifico durante l'autenticazione con le credenziali di IntelliJ.

Eseguire l'autenticazione con DefaultAzureCredential

L'esempio seguente illustra l'autenticazione SecretClient dalla libreria client azure-security-keyvault-secrets usando DefaultAzureCredential.

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

Autenticare un'identità gestita assegnata dall'utente con DefaultAzureCredential

L'esempio seguente illustra l'autenticazione SecretClient dalla libreria client azure-security-keyvault-secrets usando DefaultAzureCredential distribuita in una risorsa di Azure con un'identità gestita assegnata dall'utente configurata.

/**
 * The default credential uses the user-assigned managed identity with the specified client ID.
 */
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .managedIdentityClientId("<managed identity client ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Autenticare un utente in Azure Toolkit for IntelliJ con DefaultAzureCredential

L'esempio seguente illustra l'autenticazione SecretClient dalla libreria client azure-security-keyvault-secrets usando DefaultAzureCredential, in una workstation in cui è installato IntelliJ IDEA e l'utente ha eseguito l'accesso con un account Azure al Toolkit di Azure per IntelliJ.

Per altre informazioni sulla configurazione di IntelliJ IDEA, vedere Accedere ad Azure Toolkit for IntelliJ for IntelliJCredential.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

Credenziali dell'identità gestita

L'identità gestita autentica l'identità gestita (assegnata dal sistema o dall'utente) di una risorsa di Azure. Pertanto, se l'applicazione è in esecuzione all'interno di una risorsa di Azure che supporta l'identità gestita tramite IDENTITY/MSI, IMDS endpoint o entrambi, questa credenziale ottiene l'applicazione autenticata e offre un'esperienza di autenticazione senza segreti ottimale.

Per altre informazioni, vedere Cosa sono le identità gestite per le risorse di Azure.

Eseguire l'autenticazione in Azure con identità gestita

L'esempio seguente illustra l'autenticazione dall'ambiente SecretClientclient azure-security-keyvault-secrets usando ManagedIdentityCredential in una macchina virtuale, un servizio app, un'app per le funzioni, Cloud Shell, Service Fabric, arc o un ambiente del servizio Azure Kubernetes in Azure, con l'identità gestita assegnata dal sistema o assegnata dall'utente abilitata.

/**
 * Authenticate with a managed identity.
 */
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
  .clientId("<user-assigned managed identity client ID>") // required only for user-assigned
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(managedIdentityCredential)
  .buildClient();

Variabili di ambiente

È possibile configurare DefaultAzureCredential e EnvironmentCredential con le variabili di ambiente. Ogni tipo di autenticazione richiede i valori per le variabili specifiche:

Entità servizio con segreto

Nome variabile Valore
AZURE_CLIENT_ID ID di un'applicazione Microsoft Entra.
AZURE_TENANT_ID ID del tenant Microsoft Entra dell'applicazione.
AZURE_CLIENT_SECRET Uno dei segreti client dell'applicazione.

Entità servizio con certificato

Nome variabile Valore
AZURE_CLIENT_ID ID di un'applicazione Microsoft Entra.
AZURE_TENANT_ID ID del tenant Microsoft Entra dell'applicazione.
AZURE_CLIENT_CERTIFICATE_PATH Percorso di un file di certificato con codifica PEM, inclusa la chiave privata (senza protezione password).

Nome utente e password

Nome variabile Valore
AZURE_CLIENT_ID ID di un'applicazione Microsoft Entra.
AZURE_USERNAME Un nome utente (in genere un indirizzo di posta elettronica).
AZURE_PASSWORD Password associata per il nome utente specificato.

La configurazione viene tentata in questo ordine. Ad esempio, se i valori per un segreto client e un certificato sono entrambi presenti, viene usato il segreto client.

Passaggi successivi

Questo articolo ha illustrato l'autenticazione per le applicazioni ospitate in Azure. Questa forma di autenticazione è uno dei diversi modi in cui è possibile eseguire l'autenticazione in Azure SDK per Java. Gli articoli seguenti descrivono altri modi:

Se si verificano problemi relativi all'autenticazione dell'applicazione ospitata in Azure, vedere Risolvere i problemi di autenticazione dell'applicazione ospitata in Azure.

Dopo aver eseguito l'autenticazione master, vedere Configurare la registrazione in Azure SDK per Java per informazioni sulle funzionalità di registrazione fornite dall'SDK.