Saltar a contenido

Arquitectura Empresarial

La plataforma centraliza la identidad y el acceso bajo una topología de tres capas: borde, identidad y datos. Ninguna aplicación gestiona contraseñas directamente; toda autenticación y autorización pasa por la capa de identidad.

Topología general

flowchart TD
    Internet([Internet]) --> T

    subgraph Borde
        T[Traefik v3\nTLS + Routing]
    end

    subgraph Identidad
        K[Keycloak 26\nIAM]
    end

    subgraph Aplicaciones
        W[Spring WebFlux\nResource Server]
        B[BFF / Portal]
    end

    subgraph Datos
        PG[(PostgreSQL 16)]
    end

    T --> K
    T --> W
    T --> B
    K --> PG
    W -. valida JWT .-> K

Actores del sistema

Actor Descripción Flujo OAuth2
Empleado Usuario interno con navegador Authorization Code + PKCE · realm-internal
Socio externo Usuario de empresa partner Authorization Code + PKCE · realm-partners
Servicio M2M Microservicio sin usuario Client Credentials · realm-partners
Administrador Gestión de la plataforma Admin Console de Keycloak (red privada)

Dominios de la plataforma

flowchart LR
    subgraph IAM["Identidad & Acceso"]
        Auth[Autenticación]
        Authz[Autorización]
        Fed[Federación LDAP / OIDC]
    end
    subgraph Admin["Administración"]
        Console[Admin Console]
        Audit[Eventos / Audit Log]
    end
    subgraph Apps["Aplicaciones"]
        API[Resource APIs]
        Portal[Portales Web]
    end

    IAM --> Apps
    Admin --> IAM

Componentes y responsabilidades

Componente Tecnología Responsabilidad
Traefik Traefik v3 TLS termination, routing, middlewares, rate limiting
Keycloak Keycloak 26 Autenticación, emisión de JWT, gestión de usuarios y roles
PostgreSQL PostgreSQL 16 Persistencia de Keycloak: realms, usuarios, sesiones, claves
Resource Server Spring Boot 4 + WebFlux APIs protegidas, validación JWT local, lógica de negocio
BFF Spring Boot 4 + WebFlux Manejo del flujo OAuth2 server-side, protección de tokens frente al browser

Redes Docker

flowchart LR
    subgraph frontend["Red Docker: frontend"]
        T2[Traefik]
        K2[Keycloak]
        W2[WebFlux APIs]
    end
    subgraph data["Red Docker: data"]
        K3[Keycloak]
        PG2[(PostgreSQL)]
    end

Traefik y los servicios expuestos pertenecen a frontend. PostgreSQL solo pertenece a data. Keycloak pertenece a ambas. Los Resource Servers solo necesitan frontend.

Principios rectores

Zero Trust — Ningún componente confía implícitamente en otro. Toda petición se valida con JWT firmado, incluso dentro de la red Docker.

Defensa en profundidad — TLS en el borde, JWT verificado en cada servicio, redes Docker aisladas, PostgreSQL sin puertos expuestos.

Separación de responsabilidades — Keycloak gestiona identidad; las aplicaciones gestionan negocio. No mezclar ambas responsabilidades en el mismo componente.

Tokens de corta duración — Access tokens con TTL ≤ 5 minutos. Refresh tokens con sliding window de 30 minutos máximo.

Configuración externalizada — Secrets en variables de entorno (.env), nunca en código fuente ni en compose.yml versionado.

Evolución planificada

Fase Cambio Motivación
MVP (actual) Docker Compose · 1 VPS Validar la plataforma con coste mínimo
v1.1 Keycloak clusterizado (2 nodos + Infinispan) Alta disponibilidad
v1.2 Migración a Kubernetes + Helm Escalabilidad y orquestación declarativa
v2.0 External Secrets + HashiCorp Vault Gestión de secretos en producción robusta