> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/on-premises/es/configuracion/overleaf-toolkit/authentication/ldap-authentication.md).

# Autenticación LDAP

Esta función fue desarrollada por [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Aquí ofrecemos algunos documentos para su configuración.

{% hint style="warning" %}
Overleaf utiliza la **passport-ldapauth** biblioteca, que está relativamente desactualizada, la compatibilidad LDAP no puede garantizarse por completo. Con ciertos proveedores de identidad LDAP (por ejemplo, <https://goauthentik.io/>), pueden producirse fallos de inicio de sesión. Por lo tanto, si es posible, se recomienda usar primero el método OAuth/SAML.
{% endhint %}

### ¿Qué es LDAP

LDAP es un protocolo de autenticación utilizado para la verificación externa de identidad. Overleaf Server Pro proporciona 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 LDAP, el backend de Overleaf verifica las credenciales contra el servidor LDAP configurado, por ejemplo `ldap://ldap:10389`.

<figure><img src="/files/0a2f9092edd6d6d55e57008944fadf199852dd70" alt=""><figcaption><p>Un ejemplo de Server Pro para LDAP</p></figcaption></figure>

### Configuración

Internamente, Overleaf LDAP utiliza la [passport-ldapauth](https://github.com/vesse/passport-ldapauth) biblioteca. La mayoría de estas opciones de configuración se pasan al `servidor` objeto de configuración que se usa para configurar `passport-ldapauth`. Si tiene problemas al configurar LDAP, vale la pena leer el README de `passport-ldapauth` para hacerse 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 externos están activados. El valor de esta variable es una lista. Si la lista incluye `ldap` entonces 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 como un método de autenticación puro, que está disponible en `http://your-overleaf.com/ldap/login`.

Cuando se utilizan métodos de autenticación LDAP, un usuario introduce un `nombre de usuario` y `contraseña` en el formulario de inicio de sesión, se intenta:

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 comprueba la base de datos de usuarios de Overleaf para encontrar un usuario con la dirección de correo principal que coincida con la dirección de correo del usuario LDAP autenticado:
   * Si se encuentra un usuario coincidente, el `hashedPassword` campo de este usuario se elimina (si existe). Esto garantiza que el usuario solo pueda iniciar sesión mediante autenticación LDAP en el futuro.
   * Si no se encuentra ningún usuario coincidente, se crea un nuevo usuario de Overleaf usando el correo, nombre y apellido obtenidos del servidor LDAP.

{% hint style="danger" %}
Para los usuarios que inician sesión mediante LDAP, no almacenamos (ni eliminamos los que ya existían) las contraseñas hash en la base de datos Mongo de Overleaf.
{% endhint %}

#### Variables de entorno

* `OVERLEAF_LDAP_URL` **(obligatorio)**
  * 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 para mostrar del servicio de identidad LDAP, usado en la página de inicio de sesión.
  * Por defecto `Iniciar sesión con el proveedor LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * El atributo de correo electrónico devuelto por el servidor LDAP, predeterminado `mail`. Cada usuario LDAP debe tener al menos una dirección de correo electrónico. Si se proporcionan varias direcciones, solo se usará la primera.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * El nombre de la propiedad que contiene el nombre de pila del usuario y 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 y 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 apellido del usuario se extrae de esta variable. De lo contrario, no se usa.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * El marcador de posición para el formulario de inicio de sesión, por defecto `Nombre de usuario`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si se establece en `true`, actualiza el usuario LDAP `first_name` y `last_name` campo al iniciar sesión, y desactiva el formulario de detalles del usuario en la `/user/settings` página para usuarios LDAP. De lo contrario, los detalles solo se obtendrán en el primer inicio de sesión.
* `OVERLEAF_LDAP_BIND_DN`
  * El nombre distinguido del usuario LDAP que debe usarse para la conexión LDAP (este usuario debería poder buscar/listar cuentas en el servidor LDAP), por ejemplo, `cn=ldap_reader,dc=example,dc=com`. Si no está definido, se usa un enlace anónimo.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Contraseña para `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Propiedad del usuario para enlazar contra el cliente, por defecto `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(obligatorio)**
  * El DN base desde el que buscar usuarios. Ej., `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtro de búsqueda LDAP con el que encontrar un usuario. Use el literal '{{username}}' para interpolar el nombre de usuario dado en la búsqueda LDAP.
    * Ejemplo: `(|(uid={{username}})(mail={{username}}))` (el usuario puede iniciar sesión con correo electrónico o con nombre de inicio de sesión).
    * Ejemplo: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * El ámbito de la búsqueda puede ser `base`, `uno`, o `sub` (predeterminado).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Arreglo JSON de atributos a obtener del servidor LDAP, por ejemplo, `["uid", "mail", "givenName", "sn"]`. De forma predeterminada, se obtienen todos los atributos.
* `OVERLEAF_LDAP_STARTTLS`
  * Si `true`, se usa LDAP sobre TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Ruta al archivo que contiene el certificado CA usado para verificar el certificado SSL/TLS del servidor LDAP. Si hay varios certificados, entonces puede ser un arreglo 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 `true`, el certificado del servidor se verifica contra la lista de CA proporcionadas.
* `OVERLEAF_LDAP_CACHE`
  * Si `true`, entonces se almacenarán en caché hasta 100 credenciales a la vez durante 5 minutos.
* `OVERLEAF_LDAP_TIMEOUT`
  * Cuánto tiempo debe permitir el cliente que duren las operaciones antes de agotar el tiempo de espera, ms (Predeterminado: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Cuánto tiempo debe esperar el cliente antes de agotar el tiempo de espera en conexiones TCP, ms (Predeterminado: valor predeterminado del SO).
* `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 actualiza `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 arreglo 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, entonces el estado de administrador solo se establece en `true` durante la creación de usuarios administradores en Launchpad.

Las siguientes cinco variables se usan para configurar cómo se obtienen los contactos de usuario del servidor LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * El filtro usado para buscar usuarios en el servidor LDAP que se cargarán en contactos. El marcador de posición '{{userProperty}}' dentro del filtro se reemplaza con el valor de la propiedad especificada por `OVERLEAF_LDAP_CONTACTS_PROPERTY` del usuario LDAP que inicia la búsqueda. Si no está definido, no se recuperan usuarios del servidor LDAP en contactos.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Especifica el DN base desde el que iniciar la búsqueda de los contactos. Predeterminado: `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * El ámbito de la búsqueda puede ser `base`, `uno`, o `sub` (predeterminado).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Especifica la propiedad del objeto usuario que reemplazará el marcador de posición '{{userProperty}}' en el `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Especifica el valor de la `OVERLEAF_LDAP_CONTACTS_PROPERTY` si la búsqueda es iniciada por 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.

<details>

<summary><strong>Ejemplo</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

El ejemplo anterior da como resultado cargar en los contactos del usuario LDAP actual a todos los usuarios LDAP que tienen el mismo UNIX `gid`. Los usuarios que no sean LDAP tendrán a todos los usuarios LDAP con UNIX `gid=1000` en sus contactos.

</details>

<details>

<summary><strong>Archivo de ejemplo variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Nuestra instancia de Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Habilita la generación de miniaturas usando ImageMagick
ENABLE_CONVERSIONS=true

# Desactiva el requisito de confirmación por correo electrónico
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Establecer para TLS a través de nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Nuestra instancia de Overleaf
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Contacte a su equipo de soporte", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hola, estoy a la derecha", "url":"https://github.com/yu-i-i/overleaf-cep"}]

OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
OVERLEAF_EMAIL_SMTP_PORT=587
OVERLEAF_EMAIL_SMTP_SECURE=false
# OVERLEAF_EMAIL_SMTP_USER=
# OVERLEAF_EMAIL_SMTP_PASS=
# OVERLEAF_EMAIL_SMTP_NAME=
OVERLEAF_EMAIL_SMTP_LOGGER=false
OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
OVERLEAF_CUSTOM_EMAIL_FOOTER=Este sistema es administrado por el departamento x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP para CE ##
#################

EXTERNAL_AUTH=ldap
OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
OVERLEAF_LDAP_STARTTLS=true
OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
OVERLEAF_LDAP_EMAIL_ATT=mail
OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
OVERLEAF_LDAP_LAST_NAME_ATT=sn
# OVERLEAF_LDAP_NAME_ATT=cn
OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

OVERLEAF_LDAP_PLACEHOLDER='Nombre de usuario o dirección de correo electrónico'

OVERLEAF_LDAP_IS_ADMIN_ATT=mail
OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/on-premises/es/configuracion/overleaf-toolkit/authentication/ldap-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
