Skip to content

ImagLend — Integracion con Keycloak para Registro de Usuario

Proposito

Cuando un solicitante inicia el pipeline de originacion, el paso user_registration crea automaticamente un usuario en el realm de Keycloak del tenant. Esto permite que el solicitante tenga credenciales propias para re-ingresar al portal, ver el estado de su solicitud y acceder a sus creditos despues del desembolso.

Contexto

Ver ADR-010: User Registration in Pipeline para la decision arquitectonica.

Flujo de Registro

Datos Requeridos

CampoTipoObligatorioValidacion
emailstringSiFormato email, unico en el tenant
phonestringSiFormato telefono del pais, unico en el tenant
document_typeenumSicc, ce, passport, nit
document_numberstringSiFormato segun tipo
first_namestringSiMin 2 caracteres
last_namestringSiMin 2 caracteres

Validacion de Unicidad

Antes de crear el usuario, ImagLend verifica:

CampoContra queSi ya existe
emailTabla users del tenantOfrecer login en vez de registro
phoneTabla users del tenantOfrecer login en vez de registro
document_numberTabla users del tenantVincular solicitud al usuario existente

Request al Identity Management

http
POST /internal/users
X-Service-Auth: {service_token}
Content-Type: application/json
json
{
  "tenant_id": "tenant-uuid-001",
  "email": "maria.garcia@email.com",
  "first_name": "Maria",
  "last_name": "Garcia",
  "phone": "+593991234567",
  "document_type": "cc",
  "document_number": "1234567890",
  "role": "applicant",
  "send_credentials": true,
  "credential_strategy": "temporary_password",
  "origin": "credit_pipeline",
  "origin_reference": "application-uuid-001"
}

Response

json
{
  "data": {
    "user_id": "user-uuid-030",
    "keycloak_id": "kc-uuid-030",
    "temporary_password": "Tmp$2026xYz",
    "must_change_password": true,
    "status": "active"
  }
}

Estrategias de Credenciales

EstrategiaDescripcionCuando usar
temporary_passwordGenera password temporal, usuario debe cambiar en primer loginDefault — simple y seguro
magic_linkNo genera password; login via link enviado por emailUX mas fluida, requiere email verificado
otp_onlyLogin solo con OTP por SMSUsuarios sin email o con baja alfabetizacion digital

La estrategia se configura en el step user_registration del pipeline:

json
{
  "type": "user_registration",
  "config": {
    "credential_strategy": "temporary_password",
    "create_keycloak_user": true,
    "require_phone": true,
    "require_email": true
  }
}

Rol Applicant

El usuario creado recibe el rol applicant que otorga permisos limitados:

PermisoDescripcion
application:read:ownVer sus propias solicitudes
credit:read:ownVer sus propios creditos
payment:read:ownVer sus pagos
document:read:ownDescargar sus documentos firmados
device:read:ownVer sus dispositivos
notification:read:ownVer sus notificaciones

No puede: crear solicitudes desde el admin, ver datos de otros usuarios, gestionar productos.

Sesion Post-Registro

Despues del registro exitoso:

  1. ImagLend recibe el user_id y keycloak_id
  2. Crea una sesion autenticada para el wizard (el usuario ya no necesita access_token)
  3. El wizard continua con JWT del usuario (propagado a servicios downstream)
  4. Si el usuario abandona y vuelve, puede loguearse con sus credenciales

Evento Publicado

Identity Management publica identity.user.created que es consumido por:

  • ImagID: Crea o vincula perfil de sujeto (subject_profiles) usando document_type + document_number
  • imagy-audit: Registra el evento de creacion de usuario

Casos Edge

CasoComportamiento
Email ya existe en otro tenantSe permite (cada tenant es independiente)
Email ya existe en ESTE tenantOfrecer login, no crear duplicado
Keycloak no disponibleRetornar 502, el usuario puede reintentar
Documento ya existe pero email diferenteVincular al usuario existente (mismo sujeto, datos actualizados)
Usuario creado pero notificacion fallaUsuario se crea igual; notificacion se reintenta async

Seguridad

  • El endpoint /internal/users solo es accesible por servicios internos (no expuesto al Gateway publico)
  • Las credenciales temporales se envian por canal seguro (email o SMS, nunca en response al frontend)
  • El password temporal expira en 24 horas si no se usa
  • Se registra en audit: quien creo el usuario, desde que servicio, con que referencia

Documentos Relacionados

Reimagine Tech LLC — Documentacion Interna