> 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/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 usa la [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) 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: "..."
  }
]
```

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

Si no se encuentra un 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 un 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 OIDC externo. El usuario puede desvincularse del proveedor OIDC en la `/user/settings` página.

#### Variables de entorno

Los valores de las siguientes cinco variables requeridas se pueden encontrar usando `.well-known/openid-configuration` del punto final 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 requeridas serán proporcionados por 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 de `/user/settings` página, por defecto `Proveedor OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nombre para mostrar del servicio de identidad, usado en la página de inicio de sesión (predeterminado: `Iniciar sesión con $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Descripción del OP, usada en la `Cuentas vinculadas` sección (predeterminado: `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á utilizado por Overleaf como 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 listados. Si el dominio no coincide, un administrador debe crear manualmente la cuenta de usuario usando la dirección de correo del usuario OIDC, con una contraseña aleatoria fuerte o, preferiblemente, sin el `hashedPassword` campo en absoluto. Los nombres de dominio pueden incluir un `*.` comodín inicial para coincidir con subdominios.
    * Ejemplo: Para permitir la creación de cuentas JIT para usuarios con una dirección de correo como `name@example.com` y `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Ejemplo: Para deshabilitar por completo 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 usuario `first_name` y `last_name` campo al iniciar sesión, y deshabilita el formulario de detalles del usuario en `/user/settings` página.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` y `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Cuando ambas variables de entorno están definidas, 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`, en caso contrario `user.isAdmin` se establece en `false`. `OVERLEAF_OIDC_IS_ADMIN_FIELD` se `email` entonces el valor del atributo `emails[0].value` se usa para comprobar la coincidencia.

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

<details>

<summary>Archivo de ejemplo variables.env</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 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

#################
## 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='Iniciar sesión con el proveedor OIDC de Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=Proveedor OIDC de Keycloak
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://overleaf-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.
