Share via


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 TokenCredential implementaciones. Para 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 DefaultAzureCredential cadena no pudieron recuperar un token, cada una iniciando una CredentialUnavailableExceptionexcepción . 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 se 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, busque omitir este problema al cerrar la sesión de 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_IDy 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_PATHy, 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 trabajar 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 que puede asignar una identidad administrada y que ManagedIdentityCredential admite:

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 especificado clientId es correcto.

Si usa una identidad asignada por el sistema, asegúrese de que la ha habilitado correctamente. Para 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. Deshabilitación de servidores 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 más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual mediante Azure Portal.
- Compruebe que el punto de conexión imDS es accesible en la máquina virtual. Para obtener más información, consulte la sección siguiente.
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 internos. Si los datos se han truncado, se puede 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 más información, consulte Configuración de identidades administradas para recursos de Azure en una máquina virtual mediante Azure Portal.
- Compruebe que el punto de conexión imDS es accesible en la máquina virtual. Para obtener más información, consulte la sección siguiente.

Comprobación de 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 el entorno de App Service y que el punto de conexión de identidad administrada está disponible. Para obtener más información, consulte la sección siguiente.

Compruebe que el punto de conexión de Managed Identity de App Service 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 MSI_ENDPOINT de entorno 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.

Identidad administrada de Azure Kubernetes Service

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 Retry-After encabezado en sus respuestas. Para obtener más información, consulte Establecer 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 el identificador de Entra de Microsoft. Si usa DefaultAzureCredential, haga lo siguiente:
- Asegúrese de que el identificador de cliente se especifica a través del workloadIdentityClientId establecedor o la variable de AZURE_CLIENT_ID entorno.
- Asegúrese de que el identificador de inquilino se especifica a través de la variable de AZURE_TENANT_ID entorno.
- Asegúrese de que ha especificado la ruta de acceso del archivo de token a través de la AZURE_FEDERATED_TOKEN_FILE variable de entorno.
- Asegúrese de que el host de autoridad se especifica a través de la variable de AZURE_AUTHORITY_HOST entorno.

Si usa WorkloadIdentityCredential, haga lo siguiente:
- Asegúrese de que el identificador de inquilino se especifica a través del tenantId establecedor en el generador de credenciales o en la variable de AZURE_TENANT_ID entorno.
- Asegúrese de que el identificador de cliente se especifica a través del clientId establecedor en el generador de credenciales o la variable de AZURE_CLIENT_ID entorno.
- Asegúrese de que la ruta de acceso del archivo de token se especifica a través del tokenFilePath establecedor en el generador de credenciales o en la variable de AZURE_FEDERATED_TOKEN_FILE entorno.
- Para otros problemas, consulte la guía de solución de problemas del producto.

Pasos siguientes

Si la guía de solución de problemas de este artículo no ayuda a resolver problemas al usar las bibliotecas cliente de Azure SDK para Java, se recomienda presentar un problema en el repositorio de GitHub del SDK de Azure para Java.