Authentifier les applications Java hébergées dans Azure

Cet article explique comment la bibliothèque Azure Identity prend en charge l’authentification par jeton Microsoft Entra pour les applications hébergées sur Azure. Cette prise en charge est rendue possible par le biais d’un ensemble d’implémentations TokenCredential , qui sont abordées dans cet article.

Cet article aborde les sujets suivants :

Pour résoudre les problèmes d’authentification liés aux applications hébergées par Azure, consultez Résoudre les problèmes d’authentification des applications hébergées par Azure.

Informations d’identification Azure par défaut

DefaultAzureCredential convient à la plupart des scénarios où l’application s’exécute finalement dans le cloud Azure. DefaultAzureCredential combine les informations d’identification couramment utilisées pour l’authentification après déploiement avec les informations d’identification utilisées pour l’authentification dans un environnement de développement. DefaultAzureCredential tente de s’authentifier via les mécanismes suivants dans l’ordre :

DefaultAzureCredential authentication flow

  • Environnement : DefaultAzureCredential lit les informations de compte spécifiées via des variables d’environnement et l’utilise pour s’authentifier.
  • Identité managée : si l’application se déploie sur un hôte Azure avec l’identité managée activée, DefaultAzureCredential s’authentifie auprès de ce compte.
  • IntelliJ : si vous avez authentifié via Azure Shared Computer Toolkit pour IntelliJ, DefaultAzureCredential s’authentifie auprès de ce compte.
  • Visual Studio Code : si vous avez authentifié via le plug-in compte Azure Visual Studio Code, DefaultAzureCredential s’authentifie auprès de ce compte.
  • Azure CLI : si vous avez authentifié un compte via la commande Azure CLI az login , DefaultAzureCredential s’authentifie auprès de ce compte.

Configurer DefaultAzureCredential

DefaultAzureCredential prend en charge un ensemble de configurations par le biais de méthodes setter sur le DefaultAzureCredentialBuilder ou les variables d’environnement.

  • La définition des variables AZURE_CLIENT_IDd’environnement, AZURE_CLIENT_SECRETet AZURE_TENANT_ID telle que définie dans les variables d’environnement configure pour DefaultAzureCredential s’authentifier en tant que principal de service spécifié par les valeurs.
  • La définition .managedIdentityClientId(String) sur le générateur ou la variable AZURE_CLIENT_ID d’environnement configure DefaultAzureCredential pour s’authentifier en tant qu’identité managée définie par l’utilisateur, tout en laissant vide la configuration pour s’authentifier en tant qu’identité managée affectée par le système.
  • Le paramètre .tenantId(String) sur le générateur ou la variable AZURE_TENANT_ID d’environnement configure pour s’authentifier auprès d’un locataire spécifique pour le cache de jetons DefaultAzureCredential partagé, Visual Studio Code et IntelliJ IDEA.
  • La définition de la variable AZURE_USERNAME d’environnement configure pour DefaultAzureCredential choisir le jeton mis en cache correspondant à partir du cache de jetons partagé.
  • Le paramètre .intelliJKeePassDatabasePath(String) sur le générateur configure DefaultAzureCredential pour lire un fichier KeePass spécifique lors de l’authentification avec les informations d’identification IntelliJ.

S’authentifier avec DefaultAzureCredential

L’exemple suivant illustre l’authentification SecretClient à partir de la bibliothèque cliente azure-security-keyvault-secrets à l’aide DefaultAzureCredentialde .

// 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();

Authentifier une identité managée affectée par l’utilisateur avec DefaultAzureCredential

L’exemple suivant illustre l’authentification SecretClient à partir de la bibliothèque cliente azure-security-keyvault-secrets à l’aide DefaultAzureCredential du déploiement sur une ressource Azure avec une identité managée affectée par l’utilisateur configurée.

/**
 * 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();

Authentifier un utilisateur dans Azure Toolkit for IntelliJ avec DefaultAzureCredential

L’exemple suivant illustre l’authentification SecretClient à partir de la bibliothèque cliente azure-security-keyvault-secrets à l’aide DefaultAzureCredentiald’une station de travail où IntelliJ IDEA est installé et que l’utilisateur s’est connecté avec un compte Azure au Shared Computer Toolkit Azure pour IntelliJ.

Pour plus d’informations sur la configuration de votre IDEA IntelliJ, consultez Se connecter à Azure Toolkit for IntelliJ pour 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();

Informations d’identification de l’identité managée

L’identité managée authentifie l’identité managée (affectée par le système ou l’utilisateur) d’une ressource Azure. Par conséquent, si l’application s’exécute à l’intérieur d’une ressource Azure qui prend en charge l’identité managée via IDENTITY/MSI, IMDS les points de terminaison ou les deux, ces informations d’identification sont authentifiées et offrent une expérience d’authentification sans secret.

Pour en savoir plus, consultez en quoi consistent les identités managées pour les ressources Azure ?

Authentifier dans Azure avec l’identité managée

L’exemple suivant illustre l’authentification du SecretClient à partir de la bibliothèque de client azure-security-keyvault-secrets à l’aide des informations d’identification ManagedIdentityCredential dans un environnement de machine virtuelle, de service d’application, d’application de fonction, Cloud Shell, Service Fabric, arc ou AKS sur Azure, avec l’identité managée affectée par le système ou par l’utilisateur activée.

/**
 * 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();

Variables d'environnement

Vous pouvez configurer DefaultAzureCredential et EnvironmentCredential avec des variables d’environnement. Chaque type d’authentification nécessite des valeurs pour des variables spécifiques :

Principal de service avec une clé secrète

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’une application Microsoft Entra.
AZURE_TENANT_ID ID du locataire Microsoft Entra de l’application.
AZURE_CLIENT_SECRET Une des clés secrètes client de l’application.

Principal de service avec un certificat

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’une application Microsoft Entra.
AZURE_TENANT_ID ID du locataire Microsoft Entra de l’application.
AZURE_CLIENT_CERTIFICATE_PATH Chemin d’accès à un fichier de certificat encodé en PEM contenant la clé privée (sans protection par mot de passe).

Nom d’utilisateur et mot de passe

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’une application Microsoft Entra.
AZURE_USERNAME Nom d’utilisateur (généralement une adresse e-mail).
AZURE_PASSWORD Mot de passe associé au nom d’utilisateur donné.

La configuration est tentée dans cet ordre. Par exemple, si les valeurs d’un certificat et d’une clé secrète client sont toutes les deux présentes, la clé secrète client est utilisée.

Étapes suivantes

Cet article a abordé l’authentification pour les applications hébergées dans Azure. Cette forme d’authentification est l’une des nombreuses méthodes permettant de s’authentifier dans le Kit de développement logiciel (SDK) Azure pour Java. Les articles suivants décrivent d’autres méthodes :

Si vous rencontrez des problèmes liés à l’authentification d’application hébergée par Azure, consultez Résoudre les problèmes liés à l’authentification d’application hébergée par Azure.

Une fois l’authentification maître effectuée, consultez Configurer la journalisation dans le Kit de développement logiciel (SDK) Azure pour Java pour en savoir plus sur la fonctionnalité de journalisation fournie par le SDK.