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 |