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. Ce soutien est rendu possible par un ensemble d'implémentations TokenCredential, qui sont discuté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 dans Azure, consultez la section Dépannage de l'authentification des applications hébergées dans Azure.

DefaultAzureCredential

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. Pour plus d’informations, consultez la vue d’ensemble de DefaultAzureCredential.

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.

  • En définissant les variables d'environnement AZURE_CLIENT_ID, AZURE_CLIENT_SECRET et AZURE_TENANT_ID comme indiqué dans Variables d'environnement, vous configurez DefaultAzureCredential pour qu'il s'authentifie en tant que principal du 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 affectée par l’utilisateur, tout en laissant les configurer vides 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 DefaultAzureCredential pour s’authentifier auprès d’un locataire spécifique pour le cache de jetons partagé ou IntelliJ IDEA.
  • En définissant la variable d'environnement AZURE_USERNAME, vous configurez DefaultAzureCredential pour qu'il choisisse le jeton correspondant dans le cache de jetons partagé.

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://<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 démontre l'authentification du SecretClient de la bibliothèque client azure-security-keyvault-secrets à l'aide du DefaultAzureCredential déployé sur une ressource Azure avec une identité gérée attribuée à l'utilisateur configurée.

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

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

ManagedIdentityCredential

ManagedIdentityCredential authentifie l’identité managée (affectée par le système ou affectée par 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 obtiennent l’authentification de votre application et offrent une expérience d’authentification sans secret.

Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ?.

Authentifier dans Azure avec l’identité managée

L’exemple suivant illustre l’authentification SecretClient à partir de la bibliothèque cliente azure-security-keyvault-secrets à l’aide ManagedIdentityCredential d’une machine virtuelle, d’App Service, d’application Functions, de Cloud Shell, de Service Fabric, d’Arc ou d’UN environnement AKS sur Azure, avec une identité managée affectée par le système ou affectée par l’utilisateur activée.

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

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<KEY_VAULT_NAME>.vault.azure.net")
  .credential(credential)
  .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 ID.
AZURE_TENANT_ID ID du locataire Microsoft Entra ID 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 ID.
AZURE_TENANT_ID ID du locataire Microsoft Entra ID 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).
AZURE_CLIENT_CERTIFICATE_PASSWORD (facultatif) Mot de passe du fichier de certificat, le cas échéant.
AZURE_CLIENT_SEND_CERTIFICATE_CHAIN (facultatif) Envoyez la chaîne de certificats dans l’en-tête x5c pour prendre en charge l’authentification basée sur le sujet/l’émetteur.

Nom d’utilisateur et mot de passe

Nom de la variable Valeur
AZURE_CLIENT_ID ID d'une application Microsoft Entra ID.
AZURE_TENANT_ID ID du locataire Microsoft Entra ID de l'application.
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 des applications hébergées par Azure, consultez la section Dépannage de l'authentification des applications hébergées 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.