En el contexto del desarrollo de sistemas modernos, la gestión de identidades y accesos (IAM - Identity and Access Management) se ha convertido en un componente esencial para garantizar la seguridad, escalabilidad y gobernanza de las aplicaciones. En este proyecto, se ha optado por implementar Keycloak como solución centralizada de manejo de identidad, autenticación y autorización; solución basada en estándares abiertos ampliamente aceptados como OAuth 2.0, OpenID Connect (OIDC) y SAML 2.0.
Contexto general
2.1. Multiplicidad de usuarios y servicios
En escenarios donde múltiples aplicaciones comparten un mismo ecosistema, mantener autenticación separada en cada sistema conlleva riesgos como:
- Duplicación de usuarios y contraseñas
- Procesos inconsistentes de inicio de sesión
- Baja trazabilidad de accesos
2.2. Requisitos de seguridad avanzados
- Necesidad de autenticación multifactor (MFA)
- Protección contra ataques de repetición o token hijacking
- Auditoría y cumplimiento normativo
2.3. Escalabilidad y extensibilidad
- Integración con distintos tipos de clientes: SPA, apps móviles, backend APIs
- Delegación de autenticación a servicios externos (Google, LDAP, etc.)
- Administración centralizada de políticas de acceso
3. Alternativas consideradas
Opción | Descripción breve | Limitaciones clave |
---|---|---|
Autenticación propia | Código personalizado con base de datos local | Difícil de escalar, poca trazabilidad, inseguro |
Firebase Auth | Servicio administrado | Cerrado, dependiente del ecosistema Google |
Auth0 | SaaS de IAM comercial | Costoso a gran escala, limitaciones en planes |
Keycloak | Open-source, extensible, estándares abiertos | Requiere hosting y administración propios |
Se concluye que Keycloak proporciona un equilibrio adecuado entre flexibilidad, cumplimiento, extensibilidad y costo.
4. Estándares y protocolos que soporta Keycloak
Keycloak está alineado con los principales estándares de seguridad:
Protocolo / Norma | Descripción técnica |
---|---|
OAuth 2.0 (RFC 6749) | Delegación de acceso sin compartir credenciales |
OpenID Connect (OIDC) | Capa de identidad sobre OAuth2, permite autenticación federada |
JWT (RFC 7519) | Tokens firmados y auto-contenidos para validación descentralizada |
PKCE (RFC 7636) | Protección contra ataques de interceptación en apps móviles |
TLS 1.2+ | Canal seguro requerido en todas las comunicaciones |
NIST 800-63B | Cumple requisitos para autenticación digital robusta |
5. Beneficios de usar Keycloak
5.1. Seguridad
- Tokens firmados con JWT y RSA o ECDSA
- Control granular de sesiones, políticas de expiración y revocación
- Auditoría de eventos (inicio/cierre de sesión, intentos fallidos, cambios de datos)
5.2. Flexibilidad e interoperabilidad
- Soporta múltiples métodos de autenticación: username/password, OTP, WebAuthn, federación externa
- Compatible con cualquier cliente que entienda OAuth2/OIDC
- Delegación de identidad a LDAP, Active Directory, redes sociales (Google, Facebook, etc.)
5.3. Administración centralizada
- Panel administrativo completo basado en web
- Configuración de usuarios, roles, grupos y clientes en un solo lugar
- Separación por realms para ambientes multi-tenant o proyectos separados
5.4. Open Source y Comunidad
- Licencia Apache 2.0
- Comunidad activa y respaldo de Red Hat
- Extensible mediante SPI (Service Provider Interfaces)
6. Casos de uso que habilita en el proyecto
Caso de Uso | Implementación con Keycloak |
---|---|
Login único entre aplicaciones (SSO) | Mediante cookies y redirecciones OIDC |
Autenticación en apps móviles | Usando flujo Authorization Code + PKCE |
Acceso a APIs REST seguras | Verificación de Access Token JWT en backend |
Asignación de roles por proyecto | Roles y grupos definidos por realm y cliente |
MFA en apps críticas | Configuración de segundo factor por usuario |
Auditoría y trazabilidad | Consola administrativa + exportación de logs |
7. Costos y mantenimiento
- Costo de licencia: $0 (open source)
- Requisitos de infraestructura: contenedor Docker, mínimo 1GB RAM, almacenamiento persistente
-
Mantenimiento requerido:
- Actualizaciones de seguridad periódicas
- Configuración inicial y backup de configuración
- Supervisión de logs
8. Conclusión
La implementación de Keycloak como sistema de autenticación centralizado responde a una necesidad real de estandarizar, asegurar y escalar la gestión de identidades del sistema. Su soporte para estándares abiertos garantiza interoperabilidad y cumplimiento normativo, mientras que su naturaleza open-source permite adaptaciones específicas sin costos adicionales de licenciamiento.
Al adoptar esta herramienta, el proyecto se posiciona con una arquitectura sólida, segura y moderna, preparada para integrar múltiples tipos de aplicaciones y clientes, minimizando riesgos de seguridad y facilitando la administración a largo plazo.
Documentación Técnica: Servicio de Autenticación y Autorización con Keycloak
1. Objetivo
Diseñar e implementar un sistema de autenticación centralizado y seguro, alineado con los estándares de la industria, para controlar el acceso a los sistemas y recursos digitales de la organización.
Este servicio debe:
- Permitir la autenticación de usuarios humanos y sistemas automatizados.
- Garantizar la confidencialidad, integridad y disponibilidad de las credenciales y tokens.
- Escalar horizontalmente según la demanda.
- Ser extensible para soportar diferentes esquemas de identidad.
2. Estándares y Protocolos Adoptados
2.1 OAuth 2.0 (RFC 6749)
OAuth 2.0 se utiliza como marco de autorización para delegar acceso de forma segura entre usuarios, aplicaciones y servicios. Se admiten los siguientes "grant types":
-
authorization_code
(con PKCE): recomendado para aplicaciones públicas como SPA o móviles. -
client_credentials
: para comunicación entre servicios backend. -
refresh_token
: para renovación de tokens sin reautenticación. -
implicit
(limitado y solo si es estrictamente necesario, ya que se considera obsoleto). -
resource_owner_password_credentials
: uso restringido a sistemas legacy bajo revisión de seguridad.
2.2 OpenID Connect (OIDC)
Protocolo de autenticación federada basado en OAuth 2.0, que añade:
- Provisión de un ID Token con información del usuario autenticado.
- Punto de descubrimiento (
.well-known/openid-configuration
). - Endpoints estandarizados:
token
,userinfo
,introspection
,logout
.
2.3 JSON Web Tokens (JWT - RFC 7519)
Tokens firmados digitalmente que contienen las credenciales de acceso:
-
Claims obligatorios:
iss
,sub
,aud
,exp
,iat
. - Firmas:
RS256
por defecto, con clave pública disponible en endpoint JWKS. - Los JWT permiten validación local sin necesidad de llamadas adicionales.
2.4 HTTPS Obligatorio
Todo el tráfico entre los clientes y el servidor de autenticación debe realizarse exclusivamente mediante HTTPS (TLS 1.2 o superior). Cualquier intento de conexión insegura debe ser rechazado.
3. Gestión de Identidades y Acceso
3.1 Usuarios
- Soporte para cuentas internas propias y externas federadas (por ejemplo desde ORCID, LlaveMX, kardex.digital, etc).
- Atributos mínimos requeridos:
email
,nombre
,apellido
,username
,roles
. - Autenticación multifactor opcional (OTP vía app tercera, WebAuthn).
3.2 Roles y Permisos
- Definición de roles por aplicación.
- Asociación de roles a usuarios o grupos.
- Políticas de autorización basadas en:
- Roles (RBAC)
- Atributos (ABAC)
- Grupos
3.3 Grupos
- Organización jerárquica de usuarios por función, departamento o contexto.
- Permite herencia de roles o restricciones.
4. Tokens y Sesiones
4.1 Tipos de Tokens
Tipo | Uso | Tiempo de vida (recomendado) |
---|---|---|
Access Token | Acceso a recursos protegidos | 5-15 minutos |
Refresh Token | Renovación del Access Token | 30 minutos - 1 hora |
ID Token | Información de la sesión y del usuario | Igual que Access Token |
4.2 Seguridad de los Tokens
- Firmados con claves privadas del servidor de autenticación (RS256).
- Validación mediante JWKS (
/.well-known/jwks.json
). - Uso de
aud
yiss
para garantizar el destino y el emisor legítimo. - Tokens no deben almacenarse en almacenamiento no seguro (ej. localStorage sin protección).
4.3 Revocación e Introspección
- Endpoint de introspección disponible para validar tokens en tiempo real.
- Endpoint de revocación para forzar el cierre de sesiones o invalidación de refresh tokens.
5. Seguridad y Buenas Prácticas
- Política de contraseñas configurables: longitud mínima, caracteres especiales, rotación.
- Protección contra ataques de fuerza bruta mediante bloqueo temporal.
- HSTS activado en todos los endpoints.
- Verificación de origen (CORS), cabeceras de seguridad (
X-Frame-Options
,Content-Security-Policy
, etc.). - MFA obligatorio para cuentas privilegiadas.
6. Auditoría y Monitoreo
- Registro de eventos:
- Inicio/cierre de sesión.
- Cambios de credenciales.
- Fallos de autenticación.
- Creación y eliminación de usuarios.
- Integración con sistemas SIEM y herramientas de monitoreo (Prometheus, Grafana, ELK).
- Logs disponibles en formatos estructurados (JSON, syslog).
7. Integración
7.1 Aplicaciones Web
- Uso de OpenID Connect
authorization_code
flow con PKCE. - Redirección a endpoint
/authorize
del servidor de autenticación. - Recepción y validación del token de forma segura.
7.2 Aplicaciones Móviles
- Igual que aplicaciones web (con PKCE).
- Se recomienda usar bibliotecas oficiales de OIDC como AppAuth.
7.3 APIs
- Protección mediante bearer tokens (JWT).
- Middleware/verificadores que validen firma, audiencia y expiración del token.
- Acceso a roles del usuario vía claims del token.
8. Cumplimiento de Estándares
El sistema de autenticación cumple con los siguientes estándares y recomendaciones:
- [RFC 6749] OAuth 2.0 Authorization Framework
- [RFC 7636] Proof Key for Code Exchange (PKCE)
- [RFC 7519] JSON Web Token (JWT)
- [RFC 7591/7592] Dynamic Client Registration (opcional)
- [NIST SP 800-63B] Digital Identity Guidelines (nivel 2-3)
- OWASP Authentication Cheat Sheet
- CIS Controls - Control 6: Access Control Management
9. Implementación con Keycloak
Todo lo anterior se implementa utilizando Keycloak, una plataforma de gestión de identidades y accesos (IAM) de código abierto que cumple con los estándares mencionados.
Funcionalidades de Keycloak:
- Servidor OAuth 2.0 / OpenID Connect / SAML 2.0.
- Administración de usuarios, roles, grupos, sesiones y MFA.
- Panel de administración web y REST API para automatización.
- Soporte de federación de identidades con LDAP, Active Directory y redes sociales.
- Clúster horizontal para alta disponibilidad.
- Exportación/importación de configuración en JSON.
- Extensible mediante SPIs y políticas personalizadas.
10. Conclusiones
Este documento describe una solución de autenticación moderna, basada en estándares, segura y flexible. La implementación mediante Keycloak garantiza el cumplimiento de todos los requisitos funcionales, técnicos y de seguridad, y permite escalar el sistema en el tiempo conforme aumentan las necesidades de acceso y federación de identidades de la organización.