Dépannage de l'authentification des applications hébergées par Azure
Cet article fournit des conseils pour traiter les problèmes rencontrés lors de l'authentification d'Azure SDK pour les applications Java hébergées sur Azure, par le biais de diverses implémentations TokenCredential
. Pour plus d'informations, voir Authentifier les applications Java hébergées par Azure.
Dépannage de DefaultAzureCredential
Lorsque vous utilisez DefaultAzureCredential
, vous pouvez éventuellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." |
Toutes les informations d'identification de la chaîne DefaultAzureCredential n'ont pas réussi à récupérer un jeton, et chacune d'entre elles a généré un message CredentialUnavailableException . |
Activez le journal pour vérifier les informations d'identification essayées et obtenir des informations de diagnostic supplémentaires. Pour plus d'informations, consultez le guide de dépannage pour l'un des types d'informations d'identification sous-jacentes suivants : - EnvironmentCredential - ManagedIdentityCredential - VisualStudioCodeCredential - AzureCLICredential - AzurePowershellCredential |
HttpResponseException raised from the client with a status code of 401 or 403 |
L'authentification a réussi mais le service Azure autorisant a répondu par un code d'état 401 (Authenticate) ou 403 (Forbidden). Ce problème survient souvent lorsque DefaultAzureCredential authentifie un compte autre que celui prévu ou que le compte prévu n'a pas les bonnes permissions ou les bons rôles attribués. |
Activez le journal pour déterminer quel justificatif dans la chaîne a renvoyé le jeton d'authentification. Dans le cas où un identifiant autre que celui attendu renvoie un jeton, essayez de contourner ce problème en vous déconnectant de l'outil de développement correspondant. Assurez-vous que le rôle correct est attribué au compte utilisé. Par exemple, un rôle spécifique au service plutôt que le rôle de propriétaire de l'abonnement. |
Dépannage de EnvironmentCredential
Lorsque vous utilisez EnvironmentCredential
, vous pouvez optionnellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
Environment variables aren't fully configured. |
Une combinaison valide de variables d'environnement n'a pas été définie. | Assurez-vous que les variables d'environnement appropriées sont définies avant le démarrage de l'application pour la méthode d'authentification prévue, comme décrit dans la liste suivante : - Pour authentifier un principal de service à l'aide d'un secret client, assurez-vous que les variables AZURE_CLIENT_ID , AZURE_TENANT_ID et AZURE_CLIENT_SECRET sont correctement définies. - Pour authentifier un principal de service à l'aide d'un certificat, assurez-vous que les variables AZURE_CLIENT_ID , AZURE_TENANT_ID , AZURE_CLIENT_CERTIFICATE_PATH et éventuellement AZURE_CLIENT_CERTIFICATE_PASSWORD sont correctement définies. - Pour authentifier un utilisateur à l'aide d'un mot de passe, assurez-vous que les variables AZURE_USERNAME et AZURE_PASSWORD sont correctement définies. |
Dépannage de ManagedIdentityCredential
ManagedIdentityCredential
est conçu pour fonctionner sur différents hôtes Azure qui fournissent une identité gérée. La configuration de l'identité gérée et le dépannage des défaillances varient d'un hôte à l'autre. La liste suivante présente les environnements hôtes Azure auxquels vous pouvez attribuer une identité gérée et que ManagedIdentityCredential
prend en charge :
- Azure App Service et Azure Functions - configuration - dépannage
- Azure Arc - configuration
- Azure Kubernetes Service - configuration - dépannage
- Azure Service Fabric - configuration
- Machines virtuelles Azure et Scale Sets -configuration - dépannage
Identité gérée d’une machine virtuelle Azure
Lorsque vous utilisez ManagedIdentityCredential
, vous pouvez éventuellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
The requested identity hasn't been assigned to this resource. |
Le point de terminaison Azure Instance Metadata Service (IMDS) a répondu avec un code d'état 400, indiquant que l'identité demandée n'est pas attribuée à la machine virtuelle (VM). | Si vous utilisez une identité attribuée par l'utilisateur, assurez-vous que la valeur clientId spécifiée est correcte. Si vous utilisez une identité attribuée par le système, assurez-vous que vous l'avez correctement activée. Pour plus d'informations, consultez la section Activer l'identité gérée attribuée par le système sur une machine virtuelle existante de Configurer les identités gérées pour les ressources Azure sur une machine virtuelle à l'aide du portail Azure. |
The request failed due to a gateway error. |
La requête vers le point de terminaison IMDS a échoué en raison d'une erreur de passerelle, d'un code d'état 502 ou 504. | IMDS ne prend pas en charge les appels via proxy ou passerelle. Désactiver les proxies ou les passerelles fonctionnant sur la machine virtuelle pour les appels vers le point de terminaison IMDS http://169.254.169.254/ |
No response received from the managed identity endpoint. |
Aucune réponse n'a été reçue pour la requête adressée à l'IMDS ou la requête a expiré dans le temps. | - Vérifiez que vous avez correctement configuré l'identité gérée sur la machine virtuelle. Pour plus d'informations, voir Configurer les identités gérées pour les ressources Azure sur une machine virtuelle à l'aide du portail Azure. - Vérifiez que le point de terminaison IMDS est accessible sur la machine virtuelle. Pour plus d'informations, voir la section suivante. |
Multiple attempts failed to obtain a token from the managed identity endpoint. |
Les tentatives de récupération d'un jeton à partir du point de terminaison IMDS ont été épuisées. | - Pour plus d'informations sur les échecs spécifiques, consultez les messages d'exception internes. Si les données ont été tronquées, vous pouvez obtenir plus de détails en collectant des journaux. - Vérifiez que vous avez correctement configuré l'identité gérée sur la machine virtuelle. Pour plus d'informations, voir Configurer les identités gérées pour les ressources Azure sur une machine virtuelle à l'aide du portail Azure. - Vérifiez que le point de terminaison IMDS est accessible sur la machine virtuelle. Pour plus d'informations, voir la section suivante. |
Vérifiez que l'IMDS est disponible sur la machine virtuelle
Si vous avez accès à la machine virtuelle, vous pouvez vérifier que le point de terminaison manged identity est disponible via la ligne de commande en utilisant curl
, comme indiqué dans l'exemple suivant :
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Avertissement
La sortie de cette commande contient un jeton d'accès valide. Pour éviter de compromettre la sécurité du compte, ne partagez pas ce jeton d'accès.
Azure App Service et identité managée Azure Functions
Lorsque vous utilisez ManagedIdentityCredential
, vous pouvez éventuellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
ManagedIdentityCredential authentication unavailable. |
Les variables d'environnement configurées par l'hôte App Services n'étaient pas présentes. | - Vérifiez que vous avez correctement configuré l'identité gérée sur l'instance App Service. Pour plus d’informations, consultez Guide pratique pour utiliser des identités managées avec App Service et Azure Functions. - Vérifiez que vous avez correctement configuré l'environnement App Service et que le point de terminaison de l'identité gérée est disponible. Pour plus d'informations, voir la section suivante. |
Vérifiez que le point de terminaison de l'identité gérée d'App Service est disponible.
Si vous avez accès à SSH dans l'instance App Service, vous pouvez vérifier que l'identité gérée est disponible dans l'environnement. Tout d'abord, assurez-vous que vous avez défini les variables d'environnement MSI_ENDPOINT
et MSI_SECRET
dans l'environnement. Ensuite, vous pouvez vérifier que le point de terminaison de l'identité gérée est disponible en utilisant curl
, comme le montre l'exemple suivant :
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Avertissement
La sortie de cette commande contient un jeton d'accès valide. Pour éviter de compromettre la sécurité du compte, ne partagez pas ce jeton d'accès.
Identité gérée du service Azure Kubernetes
Identité Pod pour Kubernetes
Lorsque vous utilisez ManagedIdentityCredential
, vous pouvez éventuellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
No Managed Identity endpoint found |
L'application a tenté de s'authentifier avant qu'une identité ne soit attribuée à son pod. | Vérifiez que le pod est correctement étiqueté. Ce problème se produit également lorsqu'un pod correctement étiqueté s'authentifie avant que l'identité ne soit prête. Pour éviter les courses à l'initialisation, configurez la MNI pour qu'elle définisse l'en-tête Retry-After dans ses réponses. Pour en savoir plus, consultez Définir l'en-tête Retry-After dans la réponse NMI dans la documentation sur l'identité du pod. |
Dépannage de WorkloadIdentityCredential
Lorsque vous utilisez WorkloadIdentityCredential
, vous pouvez optionnellement essayer/attraper pour CredentialUnavailableException
. Le tableau suivant présente les erreurs que cette exception indique, ainsi que les méthodes d'atténuation :
Message d’erreur | Description | Limitation des risques |
---|---|---|
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. |
WorkloadIdentityCredential nécessite clientId , tenantId et tokenFilePath pour s'authentifier avec Microsoft Entra ID. |
Si vous utilisez DefaultAzureCredential , alors : - Assurez-vous que l'ID du client est spécifié via le setter workloadIdentityClientId ou la variable d'environnement AZURE_CLIENT_ID . - Assurez-vous que l'ID du locataire est spécifié via la variable d'environnement AZURE_TENANT_ID . - Assurez-vous que vous avez spécifié le chemin d'accès au fichier de jetons via la variable d'environnement AZURE_FEDERATED_TOKEN_FILE . - Assurez-vous que l'hôte d'autorité est spécifié via la variable d'environnement AZURE_AUTHORITY_HOST Si vous utilisez WorkloadIdentityCredential , alors : - Assurez-vous que l'ID du locataire est spécifié via le setter tenantId du credential builder ou la variable d'environnement AZURE_TENANT_ID . - Assurez-vous que l'ID du client est spécifié via le setter clientId du credential builder ou la variable d'environnement AZURE_CLIENT_ID . - Assurez-vous que le chemin d'accès au fichier de jetons soit spécifié par l'intermédiaire de l'interrupteur tokenFilePath du constructeur de certificats ou de la variable d'environnement AZURE_FEDERATED_TOKEN_FILE . - Pour les autres problèmes, consultez le guide de dépannage du produit. |
Étapes suivantes
Si les conseils de dépannage de cet article ne permettent pas de résoudre les problèmes liés à l'utilisation des bibliothèques clientes Azure SDK for Java, nous vous recommandons de déposer un problème dans le référentiel GitHub Azure SDK for Java.