Integraciones

Auth0

Este módulo permite sincronizar usuarios desde Auth0 Identity Cloud.

El proceso se realiza mediante una aplicación Machine-to-Machine (M2M) autorizada para consultar la API de gestión. Es eficiente para grandes bases de usuarios gracias a trabajos de exportación asíncronos.


Parte 1: Configuración en Auth0 Dashboard

Para acceder a la API de gestión, debemos crear una aplicación "máquina" específica para Anjana.

Paso 1: Crear aplicación M2M

  1. Inicie sesión en su panel de administración de Auth0.

  2. Vaya a Applications > Applications.

  3. Haga clic en Create Application.

  4. Asigne un nombre (ej. Anjana Provisioning Service).

  5. Seleccione el tipo Machine to Machine Applications.

  6. Haga clic en Create.

Paso 2: Autorizar la Management API

Después de crear la app, Auth0 le preguntará qué API desea autorizar.

  1. En el desplegable "Select an API", elija Auth0 Management API.

  2. En la lista de permisos (Scopes), busque y seleccione:

    • read:users (Permite leer usuarios y crear trabajos de exportación).

  3. Haga clic en Authorize.

Paso 3: Obtener credenciales

  1. Una vez autorizada, vaya a la pestaña Settings de la aplicación creada.

  2. Copie los siguientes valores:

    • Domain: (ej. dev-xyz.us.auth0.com).

    • Client ID.

    • Client Secret.


Parte 2: Configuración en application.yml del microservicio Zeus

Edite el fichero de configuración de Anjana e incluya los datos en la sección security.provisioning.providers.auth0.

YAML
security:
  provisioning:
    providers:
      auth0:
        # Clave única para este origen de datos (ej: auth0-main-tenant)
        auth0-main-tenant:
          # Dominio de su tenant (sin https://)
          domain: "dev-xyz.us.auth0.com"
          # Client ID de la App M2M (Paso 3)
          client-id: "A1b2C3d4..."
          # Client Secret de la App M2M (Paso 3)
          client-secret: "secret_value_..."

Resumen de propiedades

Propiedad YAML

Descripción

Origen en Auth0

domain

Dominio del tenant.

Applications > Settings > Domain

client-id

Identificador de la App M2M.

Applications > Settings > Client ID

client-secret

Secreto de la App M2M.

Applications > Settings > Client Secret


Mapeo de campos personalizado (field-mapping)

Anjana incluye un mapeo por defecto que cubre los casos habituales. Puede sobreescribir cualquier campo indicando la clave del perfil Auth0 de la que debe leer el valor. Las claves son listas en orden de prioridad: se usa el primer valor no vacío.

Los metadatos del usuario (user_metadata y app_metadata) se exponen con el prefijo user_metadata. y app_metadata. respectivamente. Por ejemplo, si tiene user_metadata.department, puede referenciarlo directamente en field-mapping.

Mapeo por defecto

Campo Anjana

Claves por defecto (orden de prioridad)

userName

username, email

email

email

firstName

given_name, name

lastName

family_name

phone

user_metadata.phone_number, phone_number

title

user_metadata.title

Campos disponibles

Clave

Descripción

userId

Identificador único del usuario en Auth0 (ej. auth0|abc123).

username

Nombre de usuario (solo disponible si el User Pool tiene usernames habilitados).

email

Dirección de correo electrónico.

given_name

Nombre de pila.

family_name

Apellidos.

name

Nombre completo.

nickname

Apodo.

picture

URL del avatar del usuario.

phone_number

Número de teléfono.

user_metadata.*

Cualquier clave de user_metadata con el prefijo user_metadata. (ej. user_metadata.title, user_metadata.department).

app_metadata.*

Cualquier clave de app_metadata con el prefijo app_metadata. (ej. app_metadata.role).

Ejemplo de configuración

YAML
security:
  provisioning:
    providers:
      auth0:
        auth0-main-tenant:
          domain: "dev-xyz.us.auth0.com"
          client-id: "..."
          client-secret: "..."
          field-mapping:
            # Usar given_name; si está vacío, usar name completo
            first-name: ["given_name", "name"]
            # Leer cargo de user_metadata.position, con fallback a user_metadata.title
            title: ["user_metadata.position", "user_metadata.title"]
            # Teléfono directo o desde metadatos
            phone: ["phone_number", "user_metadata.phone_number"]