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
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
# Postgres enviroment
POSTGRES_DB=keycloak
POSTGRES_USER=keycloak
POSTGRES_PASSWORD=postgres-password
# Keycloak enviroment
KC_BOOTSTRAP_ADMIN_USERNAME=admin
KC_BOOTSTRAP_ADMIN_PASSWORD=kc--password
KC_DB=postgres
KC_DB_URL=jdbc:postgresql://db-keycloak:5432/keycloak
KC_DB_USERNAME=keycloak
KC_DB_PASSWORD=postgres-password
KC_HOSTNAME=auth.midocminio.com
KC_PROXY_HEADERS=xforwarded
KC_HTTP_ENABLED=true
Fichero docker-compose
services:
db-keycloak:
image: postgres
container_name: db-keycloak
restart: unless-stopped
env_file: stack.env
volumes:
- db:/var/lib/postgresql/data
networks:
- backend
healthcheck:
test: ["CMD-SHELL", "pg_isready -U keycloak"]
interval: 5s
timeout: 3s
retries: 10
keycloak:
image: quay.io/keycloak/keycloak:latest
container_name: keycloak
restart: unless-stopped
env_file: stack.env
command:
>- start
--http-port=8080
--proxy=edge --hostname-strict=false
depends_on:
-db-keycloak:
db-keycloakcondition: service_healthy
ports:
- 8080:8080
volumes:
- data:/opt/keycloak/data
networks:
- backend
- proxy
volumes:
db:
data:
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 "keycloak.domain.com"
NGINX proxy
Para publicar el contenedor detrás de NGINX proxy, como el stack está en la red proxy solo deberás crear un nuevo host
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 + OAuth2 Proxy

Para publicar el contenedor detrás del proxy Traefik, deberás añadir al fichero docker-compose.yaml las siguientes etiquetas al servicio keycloak
labels:
- traefik.enable=true
- traefik.http.routers.keycloak.rule=Host(`auth.$DOMAIN`)
- traefik.http.routers.keycloak.tls=true
- traefik.http.routers.keycloak.tls.certresolver=letsencrypt
- traefik.http.services.keycloak.loadbalancer.server.port=8080
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
