En esta página
4 min de lectura

Día 4 - Login local Dex LDAP contra IDM OpenCloud

Conector LDAP de Dex hacia el IDM integrado de OpenCloud, corrección TLS del certificado LDAPS y cierre de la issue #1 con pruebas automatizadas.

Introducción

El día 4 (ventana de las últimas cuatro horas del 27 de mayo de 2026, ~11:40–15:40 CEST en el VPS Debian de producción) se centra en un único objetivo de autenticación: que el login local acepte cualquier usuario del IDM integrado de OpenCloud (mismo uid y contraseña que en Ajustes) y siga emitiendo tokens OIDC de Dex para el proxy.

Se sustituye el almacén estático de contraseñas de Dex por un conector LDAP hacia LDAPS del IDM, se corrige el certificado TLS del servicio LDAP interno y el bucle autoagents cierra la issue #1 de GitHub con pruebas automatizadas en PASS.

Resumen

Resultado del día

  • Dex ↔ IDM: conector ldapldaps://opencloud:9235, base ou=users,o=libregraph-idm; Dex en red Docker opencloud_opencloud-net con volúmenes de config/datos para CA idm/ldap.crt.
  • OpenCloud: IDM_LDAPS_ADDR=0.0.0.0:9235 en overlay external-proxy; login.html usa connector_id=ldap; nginx y JSON de auth alineados con cloud.km0digital.com.
  • TLS IDM: certificado regenerado con SAN DNS:opencloud (antes sólo localhost); script regenerate-opencloud-idm-ldap-cert.sh.
  • Autoagents: tarea cerrada PASS; versión del paquete 1.0.18; login manual con dos usuarios distintos pendiente de operador.

Problema

GitHub #1

El flujo híbrido ya enrutaba Google/Apple y login local por Dex, pero el conector local dependía de un password store estático en Dex: sólo funcionaba para credenciales predefinidas, no para todos los usuarios inetOrgPerson creados en el IDM de OpenCloud.

El requisito era unificar credenciales con Ajustes de OpenCloud y mantener el emisor OIDC (OC_OIDC_ISSUER) que consume el proxy.

Solución

Integración Dex LDAP + IDM

  • Dex: conector type: ldap en dex/config.yaml; eliminado el password DB para usuarios locales.
  • Compose Dex: unión a opencloud_opencloud-net; montaje de volúmenes opencloud-config y opencloud-data para leer CA y idm_password del config montado.
  • Overlay OpenCloud: IDM_LDAPS_ADDR=0.0.0.0:9235 para que Dex alcance LDAPS por hostname opencloud.
  • UI: login.html con botón «local» y connector_id=ldap; rutas nginx /dex/auth sin conector → selector de login.

Flujo

Login tras los cambios

login.html
  ├── Google  → Dex connector google  → token OIDC → proxy OpenCloud
  ├── Apple   → Dex connector apple   → (cuando esté configurado)
  └── Local   → Dex connector ldap    → IDM LDAPS opencloud:9235
                                         (cualquier uid inetOrgPerson + contraseña)

Los conectores sociales siguen el mismo patrón OIDC; el local deja de ser una lista fija en Dex y pasa a ser un bind LDAP contra el directorio embebido del stack.

Collabora

Coedición tras login unificado

La integración Collabora documentada en el día 3 habilita la edición Office en navegador para todos los usuarios autenticados. Con el conector Dex LDAP del día 4, cualquier usuario del IDM (mismo uid y contraseña que en Ajustes) puede iniciar sesión y abrir hojas de cálculo o presentaciones compartidas; varias personas pueden editar el mismo fichero XLSX o PPT a la vez.

TLS

Fix certificado IDM LDAPS

Durante las pruebas, Dex alcanzaba opencloud:9235 pero el ldap.crt autogenerado sólo incluía localhost en el SAN → error TLS certificate is valid for localhost, not opencloud.

Corrección (0a042db): script scripts/regenerate-opencloud-idm-ldap-cert.sh que regenera el certificado con DNS:localhost,DNS:opencloud,IP:127.0.0.1 y opción --restart; documentado en runbook y README de Dex.

Commits

Ventana del día (CEST)

  • cf5a561 (15:27) - feat(auth): Dex LDAP login against OpenCloud IDM for all users.
  • 0a042db (15:39) - fix(dex): regenerate IDM LDAP cert with opencloud SAN for Dex TLS.

Autoagents

Comprobaciones de cierre

  • SAN del cert IDM incluye opencloud - PASS.
  • Dex LDAP host: opencloud:9235 - PASS.
  • curl con connector_id=ldap/dex/auth/ldap - PASS.
  • Contraseña incorrecta → HTTP 401, bind LDAP, sin x509 en logs - PASS.
  • Humo conector Google - PASS.
  • Login manual dos usuarios distintos → /files - NO VERIFICADO (operador).

Despliegue

Verificación (operador)

cd /opt/opencloud
./scripts/git-sync-main.sh
./scripts/apply-opencloud-compose-overrides.sh
./scripts/regenerate-opencloud-idm-ldap-cert.sh --restart
rsync -a /opt/opencloud/host-www/opencloud-auth/ /var/www/opencloud-auth/
cd dex && docker compose up -d

curl -sI https://cloud.km0digital.com/login.html

Manual: ventana privada → login.html → login local con dos uid distintos de OpenCloud; se espera /oidc-callback.html y luego /files sin errores JWKS ni /graph/v1.0/me 500.

Las contraseñas de usuarios y secretos de bind IDM no forman parte de esta entrada; el happy-path con dos cuentas reales queda como verificación humana en producción.

Siguiente paso

Día 5

El día 5 no documenta despliegues: recoge una reunión de visión en Masnou sobre por qué creemos que hoy ya se puede ofrecer tecnología útil sin pasar por las grandes corporaciones digitales. Mientras tanto, explora los servicios o el relato del día 5.