Skip to main content

Keycloack

image.png

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

Keycloak

Requisitos

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 variables2.15-docker_add_stack_web_editor.gif

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

image.png

Para publicar el contenedor detrás de NGINX proxy, deberás añadir al final del fichero "docker-compose.yml" lo siguiente:

networks:
  default:
    external: true
    name: proxy
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:

image.png

Traefik

traefik-concepts-1.webp

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”.

image.png

akbimage.png

Cree un secreto de cliente para usar este cliente desde Keycloak. Para ello, haga clic en "Certificados y secretos" y añada "Nuevo secreto de cliente". Asegúrese de copiar y anotar el valor del secreto. Se usará más adelante en la configuración de Keycloak.

image.png

Configurar Keycloak para usar el registro de Azure

EMp8Q~3Xd453tsqQb41p0-a~tykmJH-v7lA4~cuf