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 ejecutivo

ÁreaResultado
Dex ↔ IDMConector 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.
OpenCloudIDM_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 IDMCertificado regenerado con SAN DNS:opencloud (antes sólo localhost); script regenerate-opencloud-idm-ldap-cert.sh.
AutoagentsTarea cerrada PASS; versión del paquete 1.0.18; login manual con dos usuarios distintos pendiente de operador (sin contraseñas en el entorno del agente).

Repositorio: AMVARA-CONSULTING/km0-opencloud en /opt/opencloud, rama main sincronizada con origin/main al cierre de la ventana (HEAD 0a042db, árbol limpio).

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 opencloud_opencloud-config y opencloud_opencloud-data para leer CA y, vía dex/docker-entrypoint.sh, idm_password del config montado si no hay OPENCLOUD_IDM_BIND_PW en dex/.env.
  • Overlay OpenCloudIDM_LDAPS_ADDR=0.0.0.0:9235 en overrides/opencloud-compose/external-proxy/opencloud.yml para que Dex en la red Docker alcance LDAPS por hostname opencloud.
  • UIhost-www/opencloud-auth/login.html: botón «local» con connector_id=ldap; rutas nginx /dex/auth sin conector → selector de login (nginx/snippets/opencloud-locations.conf, conf.d/opencloud-map.conf).
  • Metadatosconfig-dex.json, config-local.json, local-metadata.json coherentes con el dominio de producción.
  • Docsdocs/runbook.md (OIDC multi-proveedor) y dex/README.md (requisitos LDAP).

Flujo de 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.

Fix TLS — 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. Tarea autoagents archivada como CLOSED-1-20260527-1536-mejora-del-login-... con informe completo.

Commits en la ventana (CEST)

CommitHoraMensaje
cf5a56115:27feat(auth): Dex LDAP login against OpenCloud IDM for all users — 18 rutas (dex/, host-www/opencloud-auth/, nginx/, overrides, docs, sello autoagents).
0a042db15:39fix(dex): regenerate IDM LDAP cert with opencloud SAN for Dex TLS

Trabajo relacionado de auth en la madrugada del mismo día (fuera de esta ventana de 4 h): c905de2 (todo el login por Dex + callback OIDC) y 4fb5b8b (estado signin en localStorage con prefijo oidc.).

Autoagents — cierre de tarea

ComprobaciónResultado
SAN del cert IDM incluye opencloudPASS
Dex LDAP host: opencloud:9235PASS
curl con connector_id=ldap/dex/auth/ldapPASS
Contraseña incorrecta → HTTP 401, bind LDAP, sin x509 en logsPASS
Humo conector GooglePASS
Login manual dos usuarios distintos → /filesNO VERIFICADO (operador)

Cierre UTC: 2026-05-27 13:38. Artefacto: autoagents/tasks/done/2026/05/27/CLOSED-1-20260527-1536-mejora-del-login-para-que-funcione-con-t.md.

Despliegue y 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

openssl x509 -in /var/lib/docker/volumes/opencloud_opencloud-data/_data/idm/ldap.crt \
  -noout -ext subjectAltName
docker exec opencloud-dex grep -A2 'type: ldap' /etc/dex/config.yaml
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.

Documentación relacionada

  • /opt/opencloud/docs/km0-opencloud-resumen.red — resumen del stack
  • /opt/opencloud/dex/README.md — operación Dex y LDAP
  • /opt/opencloud/docs/runbook.md — runbook diario
  • /root/redminenotes/km0-opencloud-12h-summary-20260527.red — ventana de 12 h (bootstrap, bucle autoagents, sync Redmine)

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.