> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/on-premises/es/configuracion/overleaf-toolkit/authentication/oidc-authentication.md).

# Autenticación OIDC

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.

### Configuración

Internamente, el módulo OIDC de Overleaf utiliza [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) la biblioteca. Si tienes problemas configurando OpenID Connect, vale la pena leer el README de `passport-openidconnect` para hacerse una idea de la configuración que espera.

La variable de entorno `EXTERNAL_AUTH` es necesario para habilitar el módulo de autenticación OIDC. 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 `oidc` entonces se activará la autenticación OIDC.

Por ejemplo: `EXTERNAL_AUTH=ldap oidc`

Al usar el método de autenticación OIDC, se redirige al usuario al sitio de autenticación del Proveedor de Identidad (IdP). Si el IdP autentica correctamente al usuario, se comprueba en la base de datos de usuarios de Overleaf si existe un registro que contenga un `thirdPartyIdentifiers` campo estructurado de la siguiente manera:

```
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

La `externalUserId` debe coincidir con el ID de usuario en el perfil devuelto por el servidor IdP (ver la `OVERLEAF_OIDC_USER_ID_FIELD` variable de entorno), y `providerId` debe coincidir con el ID del proveedor OIDC (ver la `OVERLEAF_OIDC_PROVIDER_ID`).

Si no se encuentra ningún registro coincidente, se busca en la base de datos un usuario cuya dirección de correo principal coincida con el correo del perfil de usuario del IdP:

* Si se encuentra un usuario así, el `thirdPartyIdentifiers` campo se actualiza.
* Si no se encuentra ningún usuario coincidente y la creación de cuentas JIT no está deshabilitada, se crea un nuevo usuario con la dirección de correo y `thirdPartyIdentifiers` del perfil del IdP.

En ambos casos, se dice que el usuario está 'vinculado' al usuario externo OIDC. El usuario puede desvincularse del proveedor OIDC en la `/user/settings` .

#### Variables de entorno

Los valores de las siguientes cinco variables obligatorias se pueden encontrar usando `.well-known/openid-configuration` endpoint de tu Proveedor OpenID (OP).

* `OVERLEAF_OIDC_ISSUER` **(obligatorio)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(obligatorio)**
* `OVERLEAF_OIDC_TOKEN_URL` **(obligatorio)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(obligatorio)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(obligatorio)**

Los valores de las siguientes dos variables obligatorias los proporcionará el administrador de tu OP

* `OVERLEAF_OIDC_CLIENT_ID` **(obligatorio)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(obligatorio)**
* `OVERLEAF_OIDC_SCOPE`
  * Predeterminado: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * ID arbitrario del OP, por defecto `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * El nombre del OP, usado en la `Cuentas vinculadas` sección del `/user/settings` página, por defecto `Proveedor OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nombre visible del servicio de identidad, usado en la página de inicio de sesión (por defecto: `Iniciar sesión con $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Descripción del OP, usada en la `Cuentas vinculadas` sección (por defecto: `Iniciar sesión con $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Más información` URL en la descripción del OP, por defecto: no `Más información` enlace en la descripción.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * No mostrar el OP en la `/user/settings` página, si la cuenta del usuario no está vinculada con el OP, por defecto `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * El valor de este atributo será usado por Overleaf como el ID de usuario externo, por defecto `id`. Otros valores razonables posibles son `email` y `nombre de usuario` (correspondiente a `preferred_username` reclamación OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Restringe la creación de cuentas Just-in-Time (JIT) para usuarios que se autentican mediante OIDC. Si se establece como una lista de nombres de dominio separados por comas, solo se creará una nueva cuenta si el dominio de la dirección de correo del usuario coincide con uno de los dominios enumerados. Si el dominio no coincide, un administrador debe crear manualmente la cuenta del usuario usando la dirección de correo del usuario OIDC, con una contraseña aleatoria robusta o, preferiblemente, sin el `hashedPassword` campo en absoluto. Los nombres de dominio pueden incluir un prefijo `*.` comodín para coincidir con subdominios.
    * Ejemplo: Para permitir la creación de cuentas JIT para usuarios con direcciones de correo como `name@example.com` y `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Ejemplo: Para deshabilitar completamente la creación de cuentas JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si se establece en `true`, actualiza el `first_name` y `last_name` campo del usuario al iniciar sesión, y deshabilita el formulario de detalles del usuario en `/user/settings` .
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` y `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Cuando ambas variables de entorno están configuradas, el proceso de inicio de sesión actualiza `user.isAdmin = true` si el perfil devuelto por el OP contiene el atributo especificado por `OVERLEAF_OIDC_IS_ADMIN_FIELD` y su valor coincide con `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, de lo contrario `user.isAdmin` se establece en `false`. Si `OVERLEAF_OIDC_IS_ADMIN_FIELD` sea `email` entonces el valor del atributo `emails[0].value` se usa para la comprobación de coincidencia.

La URL de redirección para tu Proveedor OpenID es `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

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

{% code title="variables.env" overflow="wrap" %}

```dotenv
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 mediante nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Our Overleaf Instance
# 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

#################
## OIDC para CE ##
#################

EXTERNAL_AUTH=oidc

OVERLEAF_OIDC_PROVIDER_ID=oidc
OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Log in with Keycloak OIDC Provider'
OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak Provider
OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
OVERLEAF_OIDC_IS_ADMIN_FIELD=email
OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
```

{% endcode %}

</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://ayakaleaf-pro.ayaka.space/on-premises/es/configuracion/overleaf-toolkit/authentication/oidc-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.
