Por qué desplegar Keycloak en su VPS
Donde algunos IdP buscan la simplicidad, Keycloak busca la exhaustividad: aislamiento multi-tenant mediante los realms, federación de directorios LDAP/Active Directory, brokering hacia proveedores externos (Google, GitHub, otro OIDC), theming completo de las páginas de login y fine-grained authorization. Para una agencia que gestiona varios clientes o para un sistema de información con exigencias de conformidad, ese nivel de control es decisivo. El autoalojamiento en VPS le evita los costos por usuario de las ofertas IdP gestionadas y mantiene la totalidad de la base de identidades bajo su jurisdicción, un punto crítico para datos sensibles que no desea confiar a un tercero.
Las ventajas de un Keycloak autoalojado
- Múltiples realms para aislar por completo varios clientes o entornos en una misma instancia.
- Soporte nativo y completo de OpenID Connect, OAuth2 y SAML 2.0.
- Federación LDAP / Active Directory para reutilizar un directorio existente sin migración.
- Identity brokering: conexión mediante Google, GitHub o cualquier IdP externo en unos clics.
- Páginas de login totalmente personalizables (temas, idiomas, branding por realm).
- Políticas de autenticación detalladas: MFA condicional, duración de sesión, restricciones por rol.
Requisitos previos para este despliegue
Keycloak se ejecuta sobre la JVM (Quarkus desde la v17+) y sigue siendo más exigente que un IdP ligero. Prevea un VPS con 2 vCPU y 4 GB de RAM como mínimo, idealmente 6 GB si espera carga o varios realms activos. Una base PostgreSQL externa es muy recomendable en producción (no use nunca la base H2 integrada más allá de las pruebas). Docker y Docker Compose, un dominio dedicado (sso.midominio.com) y un reverse proxy que gestione el SSL completan los requisitos, ya que Keycloak necesita saber que se sirve detrás de un proxy HTTPS.
Desplegar Keycloak con PostgreSQL
Definir Keycloak y PostgreSQL en Compose
En su
docker-compose.yml, declare el serviciopostgres(imagenpostgres:16) y el serviciokeycloak(imagenquay.io/keycloak/keycloak). Conecte Keycloak a la base medianteKC_DB=postgres,KC_DB_URL,KC_DB_USERNAMEyKC_DB_PASSWORD.Configurar el modo producción y el proxy
Arranque con el comando
start(y nostart-dev). IndiqueKC_HOSTNAME=sso.midominio.comyKC_PROXY_HEADERS=xforwardedpara que Keycloak genere URL correctas detrás del reverse proxy. Defina el administrador inicial medianteKC_BOOTSTRAP_ADMIN_USERNAME/KC_BOOTSTRAP_ADMIN_PASSWORD.Arrancar y finalizar el build
Ejecute
docker compose up -d. En el primer arranque, Keycloak realiza un build Quarkus optimizado y luego migra el esquema PostgreSQL. Sigadocker compose logs -f keycloakhasta el mensaje que indica que el servidor está escuchando.Poner en marcha el reverse proxy SSL
Enrute
sso.midominio.comhacia el puerto8080del contenedor Keycloak mediante Caddy, Traefik o Nginx, con un certificado Let's Encrypt. Asegúrese de transmitir las cabecerasX-Forwarded-*, ya que de lo contrario las redirecciones de login se romperán.Crear un realm y un cliente
Conéctese a la consola de administración, cree un realm dedicado (nunca el realm
masterpara sus aplicaciones) y luego un cliente OIDC. Ajuste elValid redirect URIsde su aplicación y recupere elClient IDy el secreto en la pestaña Credentials.Conectar una aplicación y probar el flujo
Configure su aplicación con la URL de descubrimiento
https://sso.midominio.com/realms/mi-realm/.well-known/openid-configuration. Cree un usuario de prueba en el realm, inicie un login y compruebe la emisión del token en las Sessions de la consola.
Keycloak o Authentik: ¿cuál elegir?
Desplace la tabla
| Criterio | Keycloak | Authentik |
|---|---|---|
| Caso de uso objetivo | SSO empresarial, multi-tenant, conformidad | Self-hosting, homelab, agencias |
| Protocolos | OIDC, OAuth2, SAML, LDAP | OIDC, OAuth2, SAML, LDAP, forward auth |
| Forward auth (proxy) | No nativo (mediante extensiones) | Nativo y central en la herramienta |
| Huella de recursos | Elevada (JVM, 4 GB+ de RAM) | Moderada (2-4 GB de RAM) |
| Multi-realm / tenants | Excelente (realms aislados) | Tenants soportados, menos avanzados |
| Personalización de los flujos | Temas y SPI Java | Flujos visuales por etapas |
| Curva de aprendizaje | Pronunciada, muy completa | Más accesible |
| Federación de directorios | Madura (LDAP/AD) | Buena (LDAP) |
En producción, no sirva nunca Keycloak con la base H2 integrada ni exponga el realm master al público: cree un realm dedicado por aplicación o por cliente y reserve master para la administración. Para endurecer la instancia, desactive el registro libre, active el brute force detection en Realm Settings > Security Defenses y aprovisione todo mediante ficheros de importación de realm (--import-realm), de modo que versione su configuración en lugar de hacer clic en la interfaz.