Skip to main content
Esta funcionalidad ha sido desarrollada por yu-i-i/overleaf-cep. Aquí ofrecemos documentación para tu configuración.
Overleaf utiliza la biblioteca passport-ldapauth, que está relativamente desactualizada, por lo que no se puede garantizar plenamente la compatibilidad con LDAP. Con ciertos proveedores de identidad LDAP (por ejemplo, https://goauthentik.io/), pueden producirse fallos de inicio de sesión. Por ello, si es posible, se recomienda usar antes el método OAuth/SAML. Para goauthentik, sigue la guía Paso a paso: goauthentik que encontrarás más abajo, ya que está probada.

Qué es LDAP

LDAP es un protocolo de autenticación utilizado para la verificación de identidad externa. Overleaf Server Pro ofrece un formulario de inicio de sesión LDAP dedicado en la interfaz web, separado del método de autenticación estándar. Cuando un usuario envía su nombre de usuario y contraseña de LDAP, el backend de Overleaf verifica las credenciales contra el servidor LDAP configurado, por ejemplo ldap://ldap:10389.

Un ejemplo de LDAP en Server Pro

Configuración

Internamente, el LDAP de Overleaf utiliza la biblioteca passport-ldapauth. La mayoría de estas opciones de configuración se pasan al objeto de configuración server, que se usa para configurar passport-ldapauth. Si tienes problemas al configurar LDAP, vale la pena leer el README de passport-ldapauth para hacerte una idea de la configuración que espera. La variable de entorno EXTERNAL_AUTH es necesaria para habilitar el módulo de autenticación LDAP. Esta variable de entorno especifica qué métodos de autenticación externa se activan. El valor de esta variable es una lista. Si la lista incluye ldap, se activará la autenticación LDAP. Por ejemplo: EXTERNAL_AUTH=ldap saml A diferencia de Overleaf CEP, en nuestra edición ayaka-notes limitamos la autenticación LDAP a un método de autenticación puro, disponible en http://your-overleaf.com/ldap/login. Al usar los métodos de autenticación LDAP, cuando un usuario introduce un username y una password en el formulario de inicio de sesión, se intenta lo siguiente:
  1. Se busca un usuario LDAP en el directorio LDAP usando el filtro definido por OVERLEAF_LDAP_SEARCH_FILTER y se autentica.
  2. Si la autenticación tiene éxito, se busca en la base de datos de usuarios de Overleaf un usuario cuya dirección de correo principal coincida con la dirección de correo del usuario LDAP autenticado:
    • Si se encuentra un usuario coincidente, se elimina el campo hashedPassword de este usuario (si existe). Esto garantiza que, en el futuro, el usuario solo pueda iniciar sesión mediante autenticación LDAP.
    • Si no se encuentra ningún usuario coincidente, se crea un nuevo usuario de Overleaf con el correo, el nombre y los apellidos obtenidos del servidor LDAP.
Para los usuarios que inician sesión mediante LDAP, no almacenamos contraseñas cifradas (hash) en la base de datos mongo de Overleaf (o eliminamos las existentes).

Variables de entorno

  • OVERLEAF_LDAP_URL (obligatoria)
    • URL del servidor LDAP.
      • Ejemplo: ldaps://ldap.example.com:636 (LDAP sobre SSL)
      • Ejemplo: ldap://ldap.example.com:389 (sin cifrar o STARTTLS, si está configurado).
  • OVERLEAF_LDAP_IDENTITY_SERVICE_NAME
    • Nombre visible del servicio de identidad LDAP, usado en la página de inicio de sesión.
    • Por defecto, Log in with LDAP Provider.
  • OVERLEAF_LDAP_EMAIL_ATT
    • El atributo de correo devuelto por el servidor LDAP; por defecto mail. Cada usuario LDAP debe tener al menos una dirección de correo. Si se proporcionan varias direcciones, solo se usará la primera.
  • OVERLEAF_LDAP_FIRST_NAME_ATT
    • El nombre de la propiedad que contiene el nombre del usuario que se usa en la aplicación, normalmente givenName.
  • OVERLEAF_LDAP_LAST_NAME_ATT
    • El nombre de la propiedad que contiene el apellido del usuario que se usa en la aplicación, normalmente sn.
  • OVERLEAF_LDAP_NAME_ATT
    • El nombre de la propiedad que contiene el nombre completo del usuario, normalmente cn. Si alguna de las dos variables anteriores no está definida, el nombre y/o el apellido del usuario se extraen de esta variable. En caso contrario, no se usa.
  • OVERLEAF_LDAP_PLACEHOLDER
    • El texto de marcador de posición del formulario de inicio de sesión; por defecto Username.
  • OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN
    • Si se establece en true, actualiza los campos first_name y last_name del usuario LDAP al iniciar sesión y desactiva el formulario de datos del usuario en la página /user/settings para los usuarios LDAP. En caso contrario, los datos solo se obtendrán en el primer inicio de sesión.
  • OVERLEAF_LDAP_BIND_DN
    • El nombre distintivo del usuario LDAP que debe usarse para la conexión LDAP (este usuario debe poder buscar/listar cuentas en el servidor LDAP), p. ej., cn=ldap_reader,dc=example,dc=com. Si no se define, se usa un enlace (bind) anónimo.
  • OVERLEAF_LDAP_BIND_CREDENTIALS
    • Contraseña de OVERLEAF_LDAP_BIND_DN.
  • OVERLEAF_LDAP_BIND_PROPERTY
    • Propiedad del usuario con la que se realiza el bind contra el cliente; por defecto dn.
  • OVERLEAF_LDAP_SEARCH_BASE (obligatoria)
    • El DN base a partir del cual buscar usuarios. P. ej., ou=people,dc=example,dc=com.
  • OVERLEAF_LDAP_SEARCH_FILTER
    • Filtro de búsqueda LDAP con el que encontrar un usuario. Usa el literal ‘{{username}}’ para que el nombre de usuario indicado se interpole en la búsqueda LDAP.
      • Ejemplo: (|(uid={{username}})(mail={{username}})) (el usuario puede iniciar sesión con su correo o con su nombre de inicio de sesión).
      • Ejemplo: (sAMAccountName={{username}}) (Active Directory).
  • OVERLEAF_LDAP_SEARCH_SCOPE
    • El ámbito de la búsqueda puede ser base, one o sub (por defecto).
  • OVERLEAF_LDAP_SEARCH_ATTRIBUTES
    • Array JSON de atributos que se obtienen del servidor LDAP, p. ej., ["uid", "mail", "givenName", "sn"]. Por defecto se obtienen todos los atributos.
  • OVERLEAF_LDAP_STARTTLS
    • Si es true, se usa LDAP sobre TLS.
  • OVERLEAF_LDAP_TLS_OPTS_CA_PATH
    • Ruta al archivo que contiene el certificado de la CA usado para verificar el certificado SSL/TLS del servidor LDAP. Si hay varios certificados, puede ser un array JSON de rutas a los certificados. Los archivos deben ser accesibles para el contenedor Docker.
      • Ejemplo (un certificado): /var/lib/overleaf/certs/ldap_ca_cert.pem
      • Ejemplo (varios certificados): ["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]
  • OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH
    • Si es true, el certificado del servidor se verifica contra la lista de CA proporcionadas.
  • OVERLEAF_LDAP_CACHE
    • Si es true, se almacenarán en caché hasta 100 credenciales a la vez durante 5 minutos.
  • OVERLEAF_LDAP_TIMEOUT
    • Cuánto tiempo debe dejar el cliente que duren las operaciones antes de agotar el tiempo de espera, en ms (por defecto: Infinity).
  • OVERLEAF_LDAP_CONNECT_TIMEOUT
    • Cuánto tiempo debe esperar el cliente antes de agotar el tiempo de espera en las conexiones TCP, en ms (por defecto: el valor predeterminado del sistema operativo).
  • OVERLEAF_LDAP_IS_ADMIN_ATT y OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE
    • Cuando ambas variables de entorno están definidas, el proceso de inicio de sesión establece user.isAdmin = true si el perfil LDAP contiene el atributo especificado por OVERLEAF_LDAP_IS_ADMIN_ATT y su valor coincide con OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE o es un array que contiene OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE; en caso contrario, user.isAdmin se establece en false. Si alguna de estas variables no está definida, el estado de administrador solo se establece en true durante la creación del usuario administrador en Launchpad.
Las siguientes cinco variables se usan para configurar cómo se obtienen los contactos de los usuarios desde el servidor LDAP.
  • OVERLEAF_LDAP_CONTACTS_FILTER
    • El filtro usado para buscar en el servidor LDAP los usuarios que se cargarán en los contactos. El marcador ‘{{userProperty}}’ dentro del filtro se sustituye por el valor de la propiedad especificada por OVERLEAF_LDAP_CONTACTS_PROPERTY del usuario LDAP que inicia la búsqueda. Si no se define, no se cargan usuarios del servidor LDAP en los contactos.
  • OVERLEAF_LDAP_CONTACTS_SEARCH_BASE
    • Especifica el DN base desde el que empezar a buscar los contactos. Por defecto, OVERLEAF_LDAP_SEARCH_BASE.
  • OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE
    • El ámbito de la búsqueda puede ser base, one o sub (por defecto).
  • OVERLEAF_LDAP_CONTACTS_PROPERTY
    • Especifica la propiedad del objeto de usuario que sustituirá al marcador ‘{{userProperty}}’ en OVERLEAF_LDAP_CONTACTS_FILTER.
  • OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE
    • Especifica el valor de OVERLEAF_LDAP_CONTACTS_PROPERTY si la búsqueda la inicia un usuario que no es LDAP. Si esta variable no está definida, el filtro resultante no coincidirá con nada. El valor * puede usarse como comodín.
El ejemplo anterior carga en los contactos del usuario LDAP actual a todos los usuarios LDAP que tienen el mismo gid de UNIX. Los usuarios que no son LDAP tendrán en sus contactos a todos los usuarios LDAP con gid=1000 de UNIX.

Paso a paso: goauthentik

Esta guía describe una configuración probada con goauthentik. Los ejemplos usan el Base DN dc=example,dc=com; sustitúyelo por el tuyo.
1

Crear una cuenta de enlace (bind)

Overleaf inicia sesión primero en el directorio con una cuenta propia para encontrar al usuario. En Authentik, abre Directory > Users, haz clic en New User, elige Internal User y haz clic en Next. Introduce un nombre de usuario, por ejemplo ldapservice, y haz clic en Create:

Authentik: crear la cuenta de enlace

Abre el nuevo usuario y haz clic en Set password. Esta contraseña va en OVERLEAF_LDAP_BIND_CREDENTIALS:

Authentik: establecer la contraseña de la cuenta de enlace (instancia de prueba)

Anota el número del usuario que aparece en la barra de direcciones, por ejemplo 19 en …/#/identity/users/19. Lo necesitarás en el paso 3.
2

Crear el proveedor y la aplicación

Abre Applications > Applications y haz clic en New Application. El asistente crea la aplicación y su proveedor a la vez.1. Asigna a la aplicación un nombre y un slug, por ejemplo overleaf-ldap, y haz clic en Next:

Authentik: nombre y slug de la aplicación

2. Elige LDAP Provider y haz clic en Next:

Authentik: elegir el proveedor LDAP

3. Establece Bind Mode en Direct binding y Search Mode en Direct querying:

Authentik: modo de enlace y de búsqueda del proveedor LDAP

4. Más abajo, establece Bind Flow en default-authentication-flow y Base DN en tu Base DN, por ejemplo dc=example,dc=com:

Authentik: flujo de enlace y Base DN del proveedor LDAP

5. Haz clic en Next hasta llegar a la última página y envía la aplicación.
3

Permitir que la cuenta de enlace busque en el directorio

Sin este permiso, la cuenta de enlace solo se ve a sí misma, la búsqueda no encuentra ningún usuario y todos los inicios de sesión LDAP fallan.Abre el proveedor, ve a Permissions y haz clic en Assign Role Object Permission. En Role, escribe el número del paso 1 y selecciona ak-managed-role--user-<number>; después activa Search full LDAP directory:

Authentik: conceder a la cuenta de enlace el permiso de búsqueda (instancia de prueba)

A continuación, el rol muestra una marca de verificación en Search full LDAP directory:

Authentik: permisos de un proveedor LDAP (instancia de prueba)

4

Ejecutar el outpost LDAP

Authentik responde a LDAP a través de un outpost, un contenedor independiente. Abre Applications > Outposts, crea un outpost de tipo LDAP con tu proveedor y despliégalo como indica Authentik. Escucha en el puerto 389 del host en el que se ejecuta. Cuando está conectado, muestra una marca verde:

Authentik: un outpost LDAP en ejecución (instancia de prueba)

5

Rellenar los DN

La página del proveedor muestra el Base DN y un ejemplo en How to connect:

Authentik: vista general de un proveedor LDAP (instancia de prueba)

No copies los valores de ejemplo tal cual:
  • Bind DN muestra la cuenta con la que has iniciado sesión. Usa en su lugar la cuenta de enlace del paso 1: cn=ldapservice,ou=users,<Base DN>.
  • Search base muestra el Base DN. Usa ou=users,<Base DN>.
Authentik mantiene un grupo con el nombre de cada usuario en ou=virtual-groups. Al buscar (cn=alice) en todo el Base DN se encuentran tanto cn=alice,ou=users,… como cn=alice,ou=virtual-groups,…, y Overleaf rechaza un inicio de sesión que coincida con más de una entrada. Mantén la base de búsqueda en ou=users,<Base DN>.
6

Comprobar la búsqueda

Antes de iniciar Overleaf, ejecuta la misma búsqueda que hará. Debe mostrar exactamente un dn::
Si no aparece ningún dn:, normalmente falta el permiso del paso 3.
7

Asignar los administradores (opcional)

Los grupos de un usuario están en memberOf, como DN bajo ou=groups. Para que los miembros del grupo Admins de Authentik sean administradores de Overleaf:
El indicador de administrador se actualiza en cada inicio de sesión LDAP. Con un atributo o un valor incorrecto, todos los administradores que inicien sesión mediante LDAP pierden los derechos de administrador. Prueba primero la asignación con una segunda cuenta de administrador.
variables.env
Última modificación el 6 de octubre de 2026