Solución de problemas de autenticación de aplicaciones hospedadas en Azure
En este artículo se proporcionan instrucciones sobre cómo solucionar problemas detectados al autenticar el SDK de Azure para aplicaciones Java hospedadas en Azure, a través de varias implementaciones de TokenCredential
. Para obtener más información, consulte Autenticación de aplicaciones Java hospedadas en Azure.
Solución de problemas de DefaultAzureCredential
Si usa DefaultAzureCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
CredentialUnavailableException raised with message "DefaultAzureCredential failed to retrieve a token from the included credentials." |
Todas las credenciales de la cadena DefaultAzureCredential no pudieron recuperar un token, cada una iniciando una excepción CredentialUnavailableException . |
Habilite el registro para comprobar las credenciales que se están probando y obtener más información de diagnóstico. Para obtener más información, consulte la guía de solución de problemas para uno de los siguientes tipos de credenciales subyacentes: - EnvironmentCredential - ManagedIdentityCredential - VisualStudioCodeCredential - AzureCLICredential - AzurePowershellCredential |
HttpResponseException raised from the client with a status code of 401 or 403 |
La autenticación se realizó correctamente, pero el servicio de Azure de autorización respondió con un código de estado 401 (Autenticación) o 403 (Prohibido). Este problema suele producirse cuando DefaultAzureCredential autentica una cuenta distinta de la prevista o la cuenta prevista no tiene asignados los permisos o roles correctos. |
Habilite el registro para determinar qué credencial de la cadena devolvió el token de autenticación. En el caso de que una credencial distinta de la esperada devuelva un token, intente evitar este problema cerrando sesión en la herramienta de desarrollo correspondiente. Asegúrese de que el rol correcto se asigna a la cuenta que se está usando. Por ejemplo, un rol específico del servicio en lugar del rol propietario de la suscripción. |
Solución de problemas de EnvironmentCredential
Si usa EnvironmentCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
Environment variables aren't fully configured. |
No se estableció una combinación válida de variables de entorno. | Asegúrese de que las variables de entorno adecuadas se establecen antes del inicio de la aplicación para el método de autenticación previsto, como se describe en la lista siguiente: - Para autenticar una entidad de servicio mediante un secreto de cliente, asegúrese de que las variables AZURE_CLIENT_ID , AZURE_TENANT_ID y AZURE_CLIENT_SECRET estén correctamente establecidas. - Para autenticar una entidad de servicio mediante un certificado, asegúrese de que las variables AZURE_CLIENT_ID , AZURE_TENANT_ID , AZURE_CLIENT_CERTIFICATE_PATH y, opcionalmente, AZURE_CLIENT_CERTIFICATE_PASSWORD , estén configuradas correctamente. - Para autenticar a un usuario mediante una contraseña, asegúrese de que las variables AZURE_USERNAME y AZURE_PASSWORD estén configuradas correctamente. |
Solución de problemas de ManagedIdentityCredential
ManagedIdentityCredential
está diseñado para que funcione en varios hosts de Azure que proporcionan identidad administrada. La configuración de la identidad administrada y la solución de errores varía de host a host. En la lista siguiente se muestran los entornos de host de Azure a los que puede asignar una identidad administrada y que ManagedIdentityCredential
admite:
- Azure App Service y Azure Functions - configuración - solución de problemas
- Azure Arc - configuración
- Azure Kubernetes Service - configuración - solución de problemas
- Azure Service Fabric -configuración
- Azure Virtual Machines y Scale Sets -configuración - solución de problemas
Identidad administrada de máquina virtual de Azure
Si usa ManagedIdentityCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
The requested identity hasn't been assigned to this resource. |
El punto de conexión de Azure Instance Metadata Service (IMDS) respondió con un código de estado de 400, lo que indica que la identidad solicitada no está asignada a la máquina virtual (VM). | Si usa una identidad asignada por el usuario, asegúrese de que el clientId especificado es correcto. Si usa una identidad asignada por el sistema, asegúrese de que lo ha habilitado correctamente. Para obtener más información, consulte la sección Habilitación de la identidad administrada asignada por el sistema en una máquina virtual existente de Configuración de identidades administradas para recursos de Azure en una máquina virtual mediante Azure Portal. |
The request failed due to a gateway error. |
Error en la solicitud al punto de conexión IMDS debido a un error de puerta de enlace, código de estado 502 o 504. | IMDS no admite llamadas a través de proxy o puerta de enlace. Deshabilite los proxy o puertas de enlace que se ejecutan en la máquina virtual para las llamadas al punto de conexión de IMDS http://169.254.169.254/ |
No response received from the managed identity endpoint. |
No se recibió ninguna respuesta para la solicitud a IMDS o se agotó el tiempo de espera de la solicitud. | - Asegúrese de que ha configurado correctamente la identidad administrada en la máquina virtual. Para obtener más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual a través del portal de Azure. - Compruebe que el punto de conexión IMDS es accesible en la máquina virtual. Para obtener más información, consulte la siguiente sección. |
Multiple attempts failed to obtain a token from the managed identity endpoint. |
Se han agotado los reintentos para recuperar un token del punto de conexión IMDS. | - Para obtener más información sobre errores específicos, consulte los mensajes de excepción interna. Si los datos se han truncado, se pueden obtener más detalles mediante la recopilación de registros. - Asegúrese de que ha configurado correctamente la identidad administrada en la máquina virtual. Para obtener más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual a través del portal de Azure. - Compruebe que el punto de conexión IMDS es accesible en la máquina virtual. Para obtener más información, consulte la siguiente sección. |
Compruebe que IMDS esté disponible en la máquina virtual.
Si tiene acceso a la máquina virtual, puede comprobar que el punto de conexión de identidad administrada está disponible a través de la línea de comandos mediante curl
, como se muestra en el ejemplo siguiente:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Advertencia
La salida de este comando contiene un token de acceso válido. Para evitar poner en peligro la seguridad de la cuenta, no comparta este token de acceso.
Identidad administrada para Azure App Service y Azure Functions
Si usa ManagedIdentityCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
ManagedIdentityCredential authentication unavailable. |
Las variables de entorno configuradas por el host de App Services no estaban presentes. | - Asegúrese de que ha configurado correctamente la identidad administrada en la instancia de App Service. Para obtener más información, vea Procedimiento para usar identidades administradas para App Service y Azure Functions. - Compruebe que ha configurado correctamente la instancia de App Service Environment y que el punto de conexión de identidad administrada está disponible. Para obtener más información, consulte la siguiente sección. |
Compruebe que el punto de conexión de App Service Managed Identity está disponible
Si tiene acceso a SSH en la instancia de App Service, puede comprobar que la identidad administrada está disponible en el entorno. En primer lugar, asegúrese de que ha establecido las variables de entorno MSI_ENDPOINT
y MSI_SECRET
en el entorno. A continuación, puede comprobar que el punto de conexión de identidad administrada está disponible mediante curl
, como se muestra en el ejemplo siguiente:
curl 'http://169.254.169.254/metadata/identity/oauth2/token?resource=https://management.core.windows.net&api-version=2018-02-01' -H "Metadata: true"
Advertencia
La salida de este comando contiene un token de acceso válido. Para evitar poner en peligro la seguridad de la cuenta, no comparta este token de acceso.
Uso de Azure Kubernetes Service Managed Identity
Identidad de pod para Kubernetes
Si usa ManagedIdentityCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
No Managed Identity endpoint found |
La aplicación intentó autenticarse antes de asignar una identidad a su pod. | Compruebe que el pod está etiquetado correctamente. Este problema también se produce cuando un pod etiquetado correctamente se autentica antes de que la identidad esté lista. Para evitar las carreras de inicialización, configure NMI para establecer el encabezado Retry-After en sus respuestas. Para obtener más información, consulte Establecimiento de encabezado Retry-After en la respuesta NMI en la documentación de Pod Identity. |
Solución de problemas de WorkloadIdentityCredential
Si usa WorkloadIdentityCredential
, puede probar o detectar opcionalmente para CredentialUnavailableException
. En la tabla siguiente se muestran los errores que indica esta excepción y los métodos de mitigación:
Mensaje de error | Descripción | Mitigación |
---|---|---|
WorkloadIdentityCredential authentication unavailable. The workload options aren't fully configured. |
WorkloadIdentityCredential requiere clientId , tenantId y tokenFilePath para autenticarse con Microsoft Entra ID. |
Si usa DefaultAzureCredential : - Asegúrese de que el identificador de cliente se especifica a través del establecedor workloadIdentityClientId o la variable de entorno AZURE_CLIENT_ID . - Asegúrese de que el identificador de inquilino se especifica a través de la variable de entorno AZURE_TENANT_ID . - Asegúrese de que ha especificado la ruta de acceso del archivo de token a través de la variable de entorno AZURE_FEDERATED_TOKEN_FILE . - Asegúrese de que el host de autoridad se especifica a través de la variable de entorno AZURE_AUTHORITY_HOST . Si usa WorkloadIdentityCredential : - Asegúrese de que el identificador de inquilino se especifica a través del establecedor tenantId en el generador de credenciales o en la variable de entorno AZURE_TENANT_ID . - Asegúrese de que el identificador de cliente se especifica a través del establecedor clientId en el generador de credenciales o en la variable de entorno AZURE_CLIENT_ID . - Asegúrese de que la ruta de archivo del token se especifica a través del establecedor tokenFilePath en el generador de credenciales o en la variable de entorno AZURE_FEDERATED_TOKEN_FILE . - Para otros problemas, consulte la guía de solución de problemas del producto. |
Pasos siguientes
Si la guía de resolución de problemas de este artículo no le ayuda a resolver los problemas al usar bibliotecas cliente de Azure SDK para Java, le recomendamos que deje la incidencia en el repositorio GitHub de Azure SDK para Java.