Share via


Résoudre les problèmes d’authentification d’application hébergée par Azure

Cet article fournit des conseils sur le traitement des problèmes rencontrés lors de l’authentification des applications Azure sdk pour Java hébergées sur Azure, via différentes TokenCredential implémentations. Pour plus d’informations, consultez Authentifier les applications Java hébergées par Azure.

Résoudre les problèmes par défautAzureCredential

Lorsque vous utilisez DefaultAzureCredential, vous pouvez éventuellement essayer/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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 DefaultAzureCredential chaîne n’ont pas pu récupérer un jeton, chacune lève un CredentialUnavailableException. Activez la journalisation pour vérifier les informations d’identification en cours d’essai et obtenir des informations de diagnostic supplémentaires.

Pour plus d’informations, consultez le guide de résolution des problèmes pour l’un des types d’informations d’identification sous-jacents 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 autorisé a répondu avec un code d’état 401 (Authentifier) ou 403 (Interdit). Ce problème se produit souvent lorsque DefaultAzureCredential vous authentifiez un compte autre que celui prévu ou que le compte prévu n’a pas les autorisations ou rôles appropriés attribués. Activez la journalisation pour déterminer les informations d’identification dans la chaîne qui ont retourné le jeton d’authentification.

Dans le cas où des informations d’identification autres que celles attendues retournent un jeton, recherchez à contourner ce problème en vous déconnectent de l’outil de développement correspondant.

Vérifiez que le rôle approprié est affecté au compte utilisé. Par exemple, un rôle spécifique au service plutôt que le rôle Propriétaire de l’abonnement.

Résoudre les problèmes d’EnvironmentCredential

Lorsque vous utilisez EnvironmentCredential, vous pouvez éventuellement essayer/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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. Vérifiez 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’une clé secrète client, vérifiez que les variables AZURE_CLIENT_IDAZURE_TENANT_IDet AZURE_CLIENT_SECRET sont correctement définies.
- Pour authentifier un principal de service à l’aide d’un certificat, vérifiez que les variables AZURE_CLIENT_ID, AZURE_TENANT_IDet AZURE_CLIENT_CERTIFICATE_PATHéventuellement AZURE_CLIENT_CERTIFICATE_PASSWORD sont correctement définies.
- Pour authentifier un utilisateur à l’aide d’un mot de passe, vérifiez que les variables AZURE_USERNAME et AZURE_PASSWORD sont correctement définies.

Résoudre les problèmes de ManagedIdentityCredential

ManagedIdentityCredential est conçu pour fonctionner sur différents hôtes Azure qui fournissent une identité managée. La configuration de l’identité managée et la résolution des problèmes varient d’un hôte à l’autre. La liste suivante montre les environnements hôtes Azure que vous pouvez attribuer une identité managée et qui ManagedIdentityCredential prend en charge :

Identité gérée d’une machine virtuelle Azure

Lorsque vous utilisez ManagedIdentityCredential, vous pouvez éventuellement essayer/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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 IMDS (Azure Instance Metadata Service) a répondu avec un code d’état 400, indiquant que l’identité demandée n’est pas affectée à la machine virtuelle. Si vous utilisez une identité affectée par l’utilisateur, vérifiez que la valeur spécifiée clientId est correcte.

Si vous utilisez une identité affectée par le système, vérifiez que vous l’avez correctement activée. Pour plus d’informations, consultez la section Activer l’identité managée affectée par le système sur une machine virtuelle existante de Configurer des identités managées pour les ressources Azure sur une machine virtuelle à l’aide du Portail Azure.
The request failed due to a gateway error. La demande adressée au point de terminaison IMDS a échoué en raison d’une erreur de passerelle, du code d’état 502 ou 504. IMDS ne prend pas en charge les appels via le proxy ou la passerelle. Désactiver les proxys ou les passerelles s’exécutant sur la machine virtuelle pour les appels au 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 demande adressée à IMDS ou la demande a expiré. - Vérifiez que vous avez correctement configuré l’identité managée sur la machine virtuelle. Pour plus d’informations, consultez Configurer des identités managé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, consultez la section suivante.
Multiple attempts failed to obtain a token from the managed identity endpoint. Les nouvelles tentatives de récupération d’un jeton à partir du point de terminaison IMDS ont été épuisées. - Pour plus d’informations sur des é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 les journaux.
- Vérifiez que vous avez correctement configuré l’identité managée sur la machine virtuelle. Pour plus d’informations, consultez Configurer des identités managé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, consultez la section suivante.

Vérifier que IMDS est disponible sur la machine virtuelle

Si vous avez accès à la machine virtuelle, vous pouvez vérifier que le point de terminaison d’identité managé est disponible via la ligne de commande à l’aide curlde 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é des comptes, 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/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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é managé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 d’identité managée est disponible. Pour plus d’informations, consultez la section suivante.

Vérifiez que le point de terminaison App Service Managed Identity est disponible

Si vous avez accès à SSH dans l’instance App Service, vous pouvez vérifier que l’identité managée est disponible dans l’environnement. Tout d’abord, vérifiez que vous avez défini les variables MSI_ENDPOINT d’environnement et MSI_SECRET dans l’environnement. Ensuite, vous pouvez vérifier que le point de terminaison d’identité managée est disponible à l’aide curlde 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é des comptes, ne partagez pas ce jeton d’accès.

Identité managée Azure Kubernetes Service

Identité de pod pour Kubernetes

Lorsque vous utilisez ManagedIdentityCredential, vous pouvez éventuellement essayer/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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 affectée à son pod. Vérifiez que le pod est étiqueté correctement. Ce problème se produit également lorsqu’un pod étiqueté correctement s’authentifie avant que l’identité soit prête. Pour empêcher les courses d’initialisation, configurez NMI pour définir l’en-tête Retry-After dans ses réponses. Pour plus d’informations, consultez Définir l’en-tête Retry-After dans la réponse NMI dans la documentation d’identité pod.

Résoudre les problèmes de WorkloadIdentityCredential

Lorsque vous utilisez WorkloadIdentityCredential, vous pouvez éventuellement essayer/intercepter pour CredentialUnavailableException. Le tableau suivant présente les erreurs que cette exception indique et 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 clientIdet tenantIdtokenFilePath s’authentifie avec l’ID Microsoft Entra. Si vous utilisez DefaultAzureCredential, puis :
- Vérifiez que l’ID client est spécifié via le workloadIdentityClientId setter ou la variable d’environnement AZURE_CLIENT_ID .
- Vérifiez que l’ID de locataire est spécifié via la variable d’environnement AZURE_TENANT_ID .
- Vérifiez que vous avez spécifié le chemin du fichier de jeton via la AZURE_FEDERATED_TOKEN_FILE variable d’environnement.
- Vérifiez que l’hôte d’autorité est spécifié via la variable d’environnement AZURE_AUTHORITY_HOST .

Si vous utilisez WorkloadIdentityCredential, puis :
- Vérifiez que l’ID de locataire est spécifié via le tenantId setter sur le générateur d’informations d’identification ou la AZURE_TENANT_ID variable d’environnement.
- Vérifiez que l’ID client est spécifié via le clientId setter sur le générateur d’informations d’identification ou la AZURE_CLIENT_ID variable d’environnement.
- Vérifiez que le chemin du fichier de jeton est spécifié via le tokenFilePath setter sur le générateur d’informations d’identification ou la variable d’environnement AZURE_FEDERATED_TOKEN_FILE .
- Pour d’autres problèmes, consultez le guide de résolution des problèmes de produit.

Étapes suivantes

Si les conseils de dépannage de cet article n’aident pas à résoudre les problèmes lorsque vous utilisez le Kit de développement logiciel (SDK) Azure pour les bibliothèques clientes Java, nous vous recommandons de déposer un problème dans le référentiel Azure SDK pour Java GitHub.