Compartir a través de


Autenticación en recursos de Azure desde aplicaciones de Java hospedadas en el entorno local

Las aplicaciones hospedadas fuera de Azure, como locales o en un centro de datos de terceros, deben usar una entidad de servicio de aplicación a través de Microsoft Entra ID para autenticarse en servicios de Azure. En las secciones siguientes, aprenderá:

  • Cómo registrar una aplicación con Microsoft Entra para crear una entidad de servicio.
  • Asignación de roles a permisos de ámbito.
  • Cómo autenticarse mediante una entidad de servicio desde el código de la aplicación.

Mediante el uso de entidades de servicio de aplicaciones dedicadas, puede seguir el principio de privilegios mínimos al acceder a Azure recursos. Limite los permisos a los requisitos específicos de la aplicación durante el desarrollo para evitar el acceso accidental a Azure recursos destinados a otras aplicaciones o servicios. Este enfoque también le ayuda a evitar problemas al mover la aplicación a producción asegurándose de que la aplicación no tiene privilegios excesivos en el entorno de desarrollo.

Cree un registro de aplicación diferente para cada entorno donde hospede la aplicación. Puede configurar permisos de recursos específicos del entorno para cada entidad de servicio y asegurarse de que una aplicación implementada en un entorno no tiene acceso Azure recursos en otro entorno.

Registro de la aplicación en Azure

Los objetos de entidad de servicio de aplicación se crean a través de un registro de aplicación en Azure mediante el portal de Azure o Azure CLI.

  1. En el portal de Azure, use la barra de búsqueda para ir a la página App registrations.

  2. En la página App registrations, seleccione + Nuevo registro.

  3. En la página Registrar una aplicación :

    • En el campo Nombre , escriba un valor descriptivo que incluya el nombre de la aplicación y el entorno de destino.
    • Para los tipos de cuenta admitidos, seleccione Solo cuentas en este directorio organizativo (Solo cliente de Microsoft dirigido - locatario único) o la opción que mejor se adapte a sus requisitos.
  4. Seleccione Registrar para registrar la aplicación y crear la entidad de servicio.

    captura de pantalla de A que muestra cómo crear un registro de aplicación en el portal de Azure.

  5. En la página Registro de aplicaciones de la aplicación, copie el identificador de aplicación (cliente) y el identificador de directorio (inquilino) y péguelos en una ubicación temporal para usarlos posteriormente en las configuraciones de código de la aplicación.

  6. Seleccione Agregar un certificado o un secreto para configurar las credenciales de la aplicación.

  7. En la página Certificados y secretos , seleccione + Nuevo secreto de cliente.

  8. En el panel flotante Agregar un secreto de cliente que aparece:

    • En Descripción, escriba un valor de Current.
    • Para el valor de Expires, deje el valor predeterminado recomendado de 180 days.
    • Seleccione Agregar para agregar el secreto.
  9. En la página Certificados y secretos , copie la propiedad Value del secreto de cliente para su uso en un paso futuro.

    Nota:

    El valor del secreto de cliente solo se muestra una vez después de crear el registro de la aplicación. Puede agregar más secretos de cliente sin invalidar este secreto de cliente, pero no hay ninguna manera de volver a mostrar este valor.

Asignar roles al principal de servicio de la aplicación

A continuación, determine qué roles (permisos) necesita la aplicación en qué recursos y asigne esos roles a la entidad de servicio que creó. Los roles se pueden asignar en el ámbito de recurso, grupo de recursos o suscripción. En este ejemplo se muestra cómo asignar roles en el ámbito del grupo de recursos, ya que la mayoría de las aplicaciones agrupan todos sus recursos de Azure en un único grupo de recursos.

  1. En el portal de Azure, vaya a la página Overview del grupo de recursos que contiene la aplicación.

  2. Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.

  3. En la página Control de acceso (IAM), seleccione + Agregar y, a continuación, elija Agregar asignación de roles en el menú desplegable. La página Agregar asignación de roles proporciona varias pestañas para configurar y asignar roles.

  4. En la pestaña Rol , use el cuadro de búsqueda para buscar el rol que desea asignar. Seleccione el rol y, a continuación, elija Siguiente.

  5. En la pestaña Miembros :

    • En Asignar acceso al valor, seleccione Usuario, grupo o entidad de servicio .
    • Para el valor Miembros , elija + Seleccionar miembros para abrir el panel flotante Seleccionar miembros .
    • Busque el principal de servicio que creó anteriormente y selecciónelo en los resultados filtrados. Elija Seleccionar para seleccionar el grupo y cerrar el panel flotante.
    • Seleccione Revisar y asignar en la parte inferior de la pestaña Miembros .

    Captura de pantalla que muestra cómo asignar un rol a la entidad de servicio.

  6. En la pestaña Revisar y asignar , seleccione Revisar y asignar en la parte inferior de la página.

Establecimiento de las variables de entorno de la aplicación

En tiempo de ejecución, ciertas credenciales de la biblioteca Azure Identity, como DefaultAzureCredential, EnvironmentCredential y ClientSecretCredential, busque información de entidad de servicio por convención en las variables de entorno. Al trabajar con Java, puede configurar variables de entorno de varias maneras, en función de las herramientas y el entorno.

Independientemente del método que elija, configure las siguientes variables de entorno para el principal del servicio:

  • AZURE_CLIENT_ID: se usa para identificar la aplicación registrada en Azure.
  • AZURE_TENANT_ID: el identificador del inquilino de Microsoft Entra.
  • AZURE_CLIENT_SECRET: credencial secreta que se generó para la aplicación.

Establezca las siguientes variables de entorno. Reemplace los valores de marcador de posición por los valores reales del registro de la aplicación:

export AZURE_CLIENT_ID="<your-client-id>"
export AZURE_TENANT_ID="<your-tenant-id>"
export AZURE_CLIENT_SECRET="<your-client-secret>"

Para una aplicación de Java que se ejecuta como servicio systemd en un servidor de producción, defina las variables de entorno en un archivo y haga referencia a ella con la directiva EnvironmentFile en el archivo de unidad de servicio:

[Unit]
Description=Java application service
After=network.target

[Service]
User=app-user
WorkingDirectory=/path/to/java-app
EnvironmentFile=/path/to/java-app/app-environment-variables
ExecStart=/usr/bin/java -jar app.jar

[Install]
WantedBy=multi-user.target

El archivo de entorno debe contener una lista de variables de entorno con sus valores:

AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>

Autenticación en Azure servicios desde la aplicación

La biblioteca Azure Identity proporciona varias credentials: implementaciones de TokenCredential que admiten distintos escenarios y flujos de autenticación de Microsoft Entra. Los pasos siguientes muestran cómo usar ClientSecretCredential al trabajar con entidades de servicio localmente y en producción.

Implementación del código

Agregue la azure-identity dependencia al pom.xml archivo:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

Puede acceder a Azure servicios mediante clases de cliente especializadas desde las diversas bibliotecas cliente de Azure SDK. Para cualquier código de Java que cree un objeto de cliente Azure SDK en la aplicación, siga estos pasos:

  1. Importe la ClientSecretCredentialBuilder clase desde el com.azure.identity paquete.
  2. Cree un ClientSecretCredential objeto mediante ClientSecretCredentialBuilder con , tenantIdclientIdy clientSecret.
  3. Pase la instancia de ClientSecretCredential al método credential del generador de objetos de cliente de Azure SDK.

En el siguiente segmento de código se muestra un ejemplo de este enfoque:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;

String tenantId = System.getenv("AZURE_TENANT_ID");
String clientId = System.getenv("AZURE_CLIENT_ID");
String clientSecret = System.getenv("AZURE_CLIENT_SECRET");

ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .tenantId(tenantId)
    .clientId(clientId)
    .clientSecret(clientSecret)
    .build();

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
    .endpoint("https://<account-name>.blob.core.windows.net")
    .credential(credential)
    .buildClient();