Keycloak

Keycloak es una solución de gestión de identidad y acceso (IAM, Identity and Access Management) de código abierto. Proporciona autenticación, autorización y administración de usuarios para aplicaciones modernas, eliminando la necesidad de que cada aplicación implemente su propio sistema de seguridad.
Características principales de Keycloak:
🔑 SSO (Single Sign-On): Un usuario inicia sesión una vez y accede a múltiples aplicaciones sin volver a autenticarse.
🔄 Soporte para OAuth2, OpenID Connect y SAML: Protocolos estándar para autenticación segura.
📛 Autenticación multifactor (MFA): Agrega seguridad adicional con códigos OTP, autenticación biométrica, etc.
🧑💼 Integración con directorios LDAP y Active Directory: Permite conectar usuarios de empresas fácilmente.
📱 Inicio de sesión con redes sociales: Soporte para Google, Facebook, GitHub, etc.
🔀 Federación de identidad: Permite integrar varias fuentes de autenticación.
🔍 Autorización basada en roles (RBAC): Control de acceso detallado según roles y permisos.
🚀 Extensibilidad: Se pueden agregar personalizaciones y flujos de autenticación personalizados.
Casos de uso:
-
Autenticación centralizada para microservicios en Kubernetes.
-
Portal de usuarios con inicio de sesión unificado.
-
Integración con APIs y aplicaciones móviles.
-
Seguridad en entornos empresariales.
Enlaces
Requisitos
- Docker o Podman instalado siguiendo los pasos de instalar
- Portainer configurado siguiendo los pasos de instalar portainer.
- NGINX Proxy manager siguiendo los pasos de instalar NGINX Proxy Manager. (opcional)
- Traefik configurado siguiendo los pasos de instalar Traefik. (opcional)
Imagen
Repositorio de Docker Hub: keycloak/keycloak - Docker Image
Directorio de datos
mkdir -pv $CONTAINERDIR/keycloack/db
Portainer- Nuevo «stack»
Add a new stack – Portainer Documentation
Web editor
En Portainer «Stack» agregamos nuevo usando el editor WEB pegando el contenido del fichero «docker-compose.yml» y el contenido del fichero de variables
Fichero de variables «.env»
DOMAIN=dominio.com
POSTGRES_DB=keycloak
POSTGRES_USER=keycloak
POSTGRES_PASSWORD=keycloakpass
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=admin
KC_DB=postgres
KC_DB_URL=jdbc:postgresql://db-keycloak:5432/keycloak
KC_DB_USERNAME=$POSTGRES_USER
KC_DB_PASSWORD=$POSTGRES_PASSWORD
KC_HOSTNAME=auth.$DOMAIN
KC_PROXY_HEADERS=xforwarded
KC_HTTP_ENABLED=true
Fichero docker-compose.yml
services:
db-keycloak:
image: postgres:15
container_name: db-keycloak
env_file: stack.env
volumes:
- /var/data/keycloak/db:/var/lib/postgresql/data
networks:
- backend
keycloak:
image: quay.io/keycloak/keycloak
container_name: keycloak
env_file: stack.env
command: ["start-dev"]
depends_on:
- db-keycloak
networks:
- backend
- proxy
networks:
backend:
proxy:
external: true
En este punto ya puedes ir a http://my.docker.ip.address
Publicando detrás de un proxy
Crear registro DNS
En el proveedor que aloja el servidor DNS público, crear un registro DNS que resuelva la IP pública que llega al Proxy hacia un nombre del estilo "host.domain.com"
NGINX proxy
Para publicar el contenedor detrás de NGINX proxy, deberás añadir al final del fichero "docker-compose.yml" lo siguiente:
networks:
- backend
- proxy
networks:
backend:
proxy:
external: true
Crear un nuevo "proxy host"
Añade un nuevo proxy host con el nombre de dominio creado en el paso anterior redirigido hacia el nombre del contenedor y el puerto que use:

Traefik

Para publicar el contenedor detrás del proxy Traefik, deberás añadir al final del fichero "docker-compose.yml" lo siguiente:
networks:
- traefik_public
labels:
- traefik.enable=true
- traefik.http.routers.keycloack.rule=Host(`auth.$DOMAIN`)
- traefik.http.routers.keycloack.tls=true
- traefik.http.routers.keycloack.tls.certresolver=letsencrypt
- traefik.http.services.keycloack.loadbalancer.server.port=80
networks:
traefik_public:
external: true
Keycloak SSO with Azure AD
Configurar el registro de aplicaciones de Azure.
- Inicie sesión en el portal de Azure y busque “Registros de aplicaciones”.
- Aquí debemos crear un nuevo registro de aplicación para el “Portal de administración de flujo” y hacer clic en “Nuevo registro”.



Configurar Keycloak para usar el registro de Azure
EMp8Q~3Xd453tsqQb41p0-a~tykmJH-v7lA4~cuf
