Autenticación de aplicaciones de Java hospedadas en Azure

En este artículo se examina cómo la biblioteca de identidades de Azure admite la autenticación de tokens de Microsoft Entra para las aplicaciones hospedadas en Azure. Esta compatibilidad se hace posible a través de un conjunto de TokenCredential implementaciones, que se describen en este artículo.

En este artículo se tratan los siguientes asuntos:

Para solucionar problemas de autenticación relacionados con las aplicaciones hospedadas en Azure, consulte Solución de problemas de autenticación de aplicaciones hospedadas en Azure.

Credencial de Azure predeterminada

DefaultAzureCredential es adecuado para la mayoría de los escenarios en los que la aplicación se ejecuta en última instancia en la nube de Azure. DefaultAzureCredential combina las credenciales que se usan normalmente para autenticarse cuando se implementa con las credenciales que se usan para autenticarse en un entorno de desarrollo. DefaultAzureCredential intenta autenticarse a través de los siguientes mecanismos en orden:

DefaultAzureCredential authentication flow

  • Entorno: DefaultAzureCredential lee la información de la cuenta especificada a través de variables de entorno y la usa para autenticarse.
  • Identidad administrada: si la aplicación se implementa en un host de Azure con identidad administrada habilitada, DefaultAzureCredential se autentica con esa cuenta.
  • IntelliJ: si se ha autenticado a través del kit de herramientas de Azure para IntelliJ, DefaultAzureCredential se autentica con esa cuenta.
  • Visual Studio Code: si se ha autenticado a través del complemento de cuenta de Azure de Visual Studio Code, DefaultAzureCredential se autentica con esa cuenta.
  • CLI de Azure: si ha autenticado una cuenta mediante el comando de la CLI az login de Azure, DefaultAzureCredential se autentica con esa cuenta.

Configuración de DefaultAzureCredential

DefaultAzureCredential admite un conjunto de configuraciones mediante establecedores en el elemento DefaultAzureCredentialBuilder o en variables de entorno.

  • Al establecer las variables AZURE_CLIENT_IDde entorno , AZURE_CLIENT_SECRETy AZURE_TENANT_ID como se define en Variables de entorno , se configura DefaultAzureCredential para autenticarse como la entidad de servicio especificada por los valores.
  • Si se establece .managedIdentityClientId(String) en el generador o la variable AZURE_CLIENT_ID de entorno, se configura DefaultAzureCredential para autenticarse como una identidad administrada definida por el usuario, al dejarlas vacías, se configura para autenticarse como una identidad administrada asignada por el sistema.
  • Si se establece .tenantId(String) en el generador o la variable AZURE_TENANT_ID de entorno, se configura DefaultAzureCredential para autenticarse en un inquilino específico para la caché de tokens compartidos, Visual Studio Code e IntelliJ IDEA.
  • Al establecer la variable AZURE_USERNAME de entorno, se configura DefaultAzureCredential para elegir el token almacenado en caché correspondiente de la caché de tokens compartidos.
  • Al .intelliJKeePassDatabasePath(String) establecer en el generador, se DefaultAzureCredential configura para leer un archivo KeePass específico al autenticarse con credenciales de IntelliJ.

Autenticación con DefaultAzureCredential

En el ejemplo siguiente se muestra cómo autenticar SecretClient desde la biblioteca cliente azure-security-keyvault-secrets mediante DefaultAzureCredential.

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

Autenticación de una identidad administrada asignada por el usuario con DefaultAzureCredential

En el ejemplo siguiente se muestra cómo autenticar SecretClient desde la biblioteca cliente azure-security-keyvault-secrets mediante el uso DefaultAzureCredential implementado en un recurso de Azure con una identidad administrada asignada por el usuario configurada.

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

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

Autenticación de un usuario en Azure Toolkit for IntelliJ con DefaultAzureCredential

En el ejemplo siguiente se muestra cómo autenticar desde SecretClient la biblioteca cliente azure-security-keyvault-secrets mediante DefaultAzureCredential, en una estación de trabajo donde está instalado IntelliJ IDEA y el usuario ha iniciado sesión con una cuenta de Azure en el kit de herramientas de Azure para IntelliJ.

Para más información sobre la configuración de IntelliJ IDEA, consulte Inicio de sesión de Azure Toolkit for IntelliJ para IntelliJCredential.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

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

Credencial de identidad administrada

La identidad administrada autentica la identidad administrada (asignada por el sistema o por el usuario) de un recurso de Azure. Por lo tanto, si la aplicación se ejecuta dentro de un recurso de Azure que admite identidad administrada a través IDENTITY/MSIde , IMDS puntos de conexión o ambos, esta credencial obtiene la aplicación autenticada y ofrece una excelente experiencia de autenticación sin secretos.

Para más información, consulte ¿Qué es Managed Identities for Azure Resources?

Autenticación en Azure con identidad administrada

En el ejemplo siguiente se muestra cómo autenticar el elemento SecretClient de la biblioteca cliente azure-security-keyvault-secrets con la clase ManagedIdentityCredential en un entorno de máquina virtual, App Service, aplicación de funciones, Cloud Shell, Service Fabric, Arc o AKS en Azure, con la identidad administrada asignada por el sistema o por el usuario habilitada.

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

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

Variables de entorno

Puede configurar DefaultAzureCredential y EnvironmentCredential con variables de entorno. Cada tipo de autenticación requiere valores para variables específicas:

Entidad de servicio con secreto

Nombre de la variable Valor
AZURE_CLIENT_ID Identificador de una aplicación de Microsoft Entra.
AZURE_TENANT_ID Identificador del inquilino de Microsoft Entra de la aplicación.
AZURE_CLIENT_SECRET Uno de los secretos de cliente de la aplicación.

Entidad de servicio con certificado

Nombre de la variable Valor
AZURE_CLIENT_ID Identificador de una aplicación de Microsoft Entra.
AZURE_TENANT_ID Identificador del inquilino de Microsoft Entra de la aplicación.
AZURE_CLIENT_CERTIFICATE_PATH Ruta de acceso a un archivo de certificado codificado con PEM que incluye la clave privada (sin protección por contraseña).

Nombre de usuario y contraseña

Nombre de la variable Valor
AZURE_CLIENT_ID Identificador de una aplicación de Microsoft Entra.
AZURE_USERNAME Nombre de usuario (normalmente una dirección de correo electrónico).
AZURE_PASSWORD Contraseña asociada para el nombre de usuario especificado.

La configuración se intenta en este orden. Por ejemplo, si los valores del secreto de cliente y el certificado están presentes, se utiliza el secreto de cliente.

Pasos siguientes

En este artículo se ha tratado la autenticación para aplicaciones hospedadas en Azure. Esta forma de autenticación es una de las varias maneras con las que puede autenticarse en Azure SDK para Java. En los siguientes artículos se describen otras maneras:

Si tiene problemas relacionados con la autenticación de aplicaciones hospedadas en Azure, consulte Solución de problemas de autenticación de aplicaciones hospedadas en Azure.

Después de conocer la autenticación, consulte Configuración del registro en Azure SDK para Java para obtener información sobre la funcionalidad de registro que proporciona el SDK.