> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticación SAML

<Info>
  Esta funcionalidad ha sido desarrollada por [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Aquí ofrecemos documentación para tu configuración.
</Info>

### Configuración

Internamente, el módulo SAML de Overleaf utiliza la biblioteca [passport-saml](https://github.com/node-saml/passport-saml); la mayoría de las siguientes opciones de configuración se transmiten a `passport-saml`. Si tienes problemas para configurar SAML, vale la pena leer el README de `passport-saml` 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 SAML. Esta variable de entorno especifica qué métodos de autenticación externa se activan. Su valor es una lista. Si la lista incluye `saml`, se activará la autenticación SAML.

Por ejemplo: `EXTERNAL_AUTH=ldap saml`

Al utilizar el método de autenticación SAML, el usuario es redirigido al sitio de autenticación del proveedor de identidad (IdP). Si el IdP autentica correctamente al usuario, se busca en la base de datos de usuarios de Overleaf un registro que contenga un campo `samlIdentifiers` con la siguiente estructura:

```json theme={null}
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

El `externalUserId` debe coincidir con el valor de la propiedad especificada por `userIdAttribute` en el perfil de usuario devuelto por el servidor del IdP.

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

* Si se encuentra dicho usuario, se elimina el campo `hashedPassword` para deshabilitar la autenticación local y se añade el campo `samlIdentifiers`.
* Si no se encuentra ningún usuario coincidente, se crea un nuevo usuario con la dirección de correo electrónico y los `samlIdentifiers` del perfil del IdP.

<strong>Nota:</strong> Actualmente solo se admite un IdP SAML. El campo `providerId` de `samlIdentifiers` está fijado en `'1'`.

#### Variables de entorno

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Nombre visible del servicio de identidad, que se usa en la página de inicio de sesión (por defecto: `Log in with SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Overleaf usará el valor de este atributo como ID de usuario externo; por defecto, `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Nombre del campo de correo electrónico en el perfil de usuario; por defecto, `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Nombre del campo firstName en el perfil de usuario; por defecto, `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Nombre del campo lastName en el perfil de usuario; por defecto, `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Si se establece en `true`, actualiza los campos `first_name` y `last_name` del usuario al iniciar sesión y desactiva el formulario de datos del usuario en la página `/user/settings`.
* `OVERLEAF_SAML_ENTRYPOINT` <strong>(obligatoria)</strong>
  * URL del punto de entrada del servicio de identidad SAML.
    * Ejemplo: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Ejemplo de Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` <strong>(obligatoria)</strong>
  * El nombre del emisor (Issuer).
* `OVERLEAF_SAML_AUDIENCE`
  * Audience esperado en la respuesta SAML; por defecto, el valor de `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` <strong>(obligatoria)</strong>
  * Ruta a un archivo que contiene el certificado público del proveedor de identidad, utilizado para validar las firmas de las respuestas SAML entrantes. Si el proveedor de identidad tiene varios certificados de firma válidos, puede ser un array JSON de rutas a los certificados.
    * Ejemplo (un certificado): `/var/lib/overleaf/certs/idp_cert.pem`
    * Ejemplo (varios certificados): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Ruta a un archivo que contiene el certificado público de firma que se incrusta en las solicitudes de autenticación para que el IdP pueda validar las firmas de la solicitud SAML entrante. Es obligatorio al configurar el [endpoint de metadatos](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) cuando la estrategia se configura con `OVERLEAF_SAML_PRIVATE_KEY`. Se puede proporcionar un array JSON de rutas a certificados para permitir la rotación de certificados. Al proporcionar un array de certificados, la primera entrada del array debe corresponder a la `OVERLEAF_SAML_PRIVATE_KEY` actual. Las entradas adicionales del array pueden usarse para publicar en los IdP los próximos certificados antes de cambiar `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Ruta a un archivo que contiene una clave privada en formato PEM correspondiente a `OVERLEAF_SAML_PUBLIC_CERT`, utilizada para firmar las solicitudes de autenticación enviadas por passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Ruta a un archivo que contiene un certificado público, utilizado para el [endpoint de metadatos](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Ruta a un archivo que contiene la clave privada correspondiente a `OVERLEAF_SAML_DECRYPTION_CERT`, que se utilizará para intentar descifrar las aserciones cifradas que se reciban.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Permite establecer opcionalmente el algoritmo de firma para firmar las solicitudes; los valores válidos son 'sha1' (predeterminado), 'sha256' (preferido) y 'sha512' (el más seguro; comprueba si tu IdP lo admite).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Diccionario JSON de parámetros de consulta adicionales que se añadirán a todas las solicitudes.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Diccionario JSON de parámetros de consulta adicionales que se añadirán a las solicitudes 'authorize'.
    * Ejemplo: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Formato del identificador de nombre que se solicitará al proveedor de identidad (por defecto: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Si usas `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, asegúrate de que la variable de entorno `OVERLEAF_SAML_EMAIL_FIELD` esté definida. Si se requiere `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`, también debes definir la variable de entorno `OVERLEAF_SAML_USER_ID_FIELD`, que puede establecerse, por ejemplo, en la dirección de correo electrónico del usuario.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Desfase de tiempo, en milisegundos, aceptable entre el cliente y el servidor al comprobar las marcas de tiempo de validez de las condiciones de aserción OnBefore y NotOnOrAfter. Si se establece en -1, se deshabilita por completo la comprobación de estas condiciones. El valor predeterminado es 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * Atributo `AttributeConsumingServiceIndex` que se añade a AuthnRequest para indicar al IdP qué conjunto de atributos debe adjuntar a la respuesta ([enlace](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Array JSON de valores de formato de identificador de nombre para solicitar el contexto de autenticación. Por defecto: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Si es `true`, la solicitud SAML inicial del proveedor de servicios especifica que el IdP debe forzar la reautenticación del usuario, incluso si tiene una sesión válida.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Si es `true`, no se solicita un contexto de autenticación específico. Por ejemplo, puedes establecerlo en `true` para permitir contextos adicionales, como inicios de sesión sin contraseña (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). La compatibilidad con contextos adicionales depende de tu IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Si se establece en `HTTP-POST`, solicitará la autenticación al IdP mediante el binding HTTP POST; de lo contrario, se usa HTTP-Redirect por defecto.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Si es `always`, se validará InResponseTo en las respuestas SAML entrantes.
  * Si es `never`, no se validará InResponseTo (predeterminado).
  * Si es `ifPresent`, InResponseTo solo se validará si está presente en la respuesta SAML entrante.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` y `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Cuando se establecen en `true` (predeterminado), Overleaf espera que las aserciones SAML y, respectivamente, toda la respuesta de autenticación SAML estén firmadas por el IdP. Cuando ambas opciones son `false`, al menos las aserciones o la respuesta deben estar firmadas.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Define el tiempo de expiración tras el cual un ID de solicitud generado para una solicitud SAML dejará de ser válido si aparece en el campo `InResponseTo` de una respuesta SAML. Por defecto: 28800000 (8 horas).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Dirección base a la que se envían las solicitudes de cierre de sesión (por defecto: `entryPoint`).
    * Ejemplo: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Diccionario JSON de parámetros de consulta adicionales que se añadirán a las solicitudes 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` y `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Cuando ambas variables de entorno están definidas, el proceso de inicio de sesión establece `user.isAdmin = true` si el perfil devuelto por el IdP SAML contiene el atributo especificado en `OVERLEAF_SAML_IS_ADMIN_FIELD` y su valor coincide con `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` o es un array que contiene `OVERLEAF_SAML_IS_ADMIN_FIELD_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.

**Metadatos para el proveedor de identidad**

La versión actual de Overleaf CE incluye un endpoint para obtener los metadatos del proveedor de servicios: `http://my-overleaf-instance.com/saml/meta`

El proveedor de identidad deberá configurarse para reconocer el servidor de Overleaf como "proveedor de servicios" (Service Provider). Consulta la documentación de tu servidor SAML para obtener instrucciones sobre cómo hacerlo.

A continuación se muestra un ejemplo de metadatos adecuados del proveedor de servicios:

<Accordion title="ol-meta.xml">
  ```text theme={null}
  <?xml version="1.0"?>
  <EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                    entityID="MyOverleaf"
                    ID="_b508c83b7dda452f5b269383fb391107116f8f57">
    <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
      <KeyDescriptor use="signing">
        <ds:KeyInfo>
          <ds:X509Data>
            <ds:X509Certificate>MII...
  [skipped]
  </ds:X509Certificate>
          </ds:X509Data>
        </ds:KeyInfo>
      </KeyDescriptor>
      <KeyDescriptor use="encryption">
        <ds:KeyInfo>
          <ds:X509Data>
            <ds:X509Certificate>MII...
  [skipped]
  </ds:X509Certificate>
          </ds:X509Data>
        </ds:KeyInfo>
        <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
      </KeyDescriptor>
      <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                           Location="https://my-overleaf-instance.com/saml/logout/callback"/>
      <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
      <AssertionConsumerService index="1"
                                isDefault="true"
                                Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                Location="https://my-overleaf-instance.com/saml/login/callback"/>
    </SPSSODescriptor>
  </EntityDescriptor>

  ```
</Accordion>

Anota los certificados, `AssertionConsumerService.Location`, `SingleLogoutService.Location` y `EntityDescriptor.entityID` y configúralos según corresponda en la configuración de tu IdP, o envía el archivo de metadatos al administrador del IdP.

<Accordion title="Ejemplo de archivo variables.env (mínimo)">
  ```text theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via 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": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "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=This system is run by department x

  OVERLEAF_PROXY_LEARN=true
  NAV_HIDE_POWERED_BY=true

  #################
  ##     SAML    ##
  #################

  EXTERNAL_AUTH=saml
  OVERLEAF_SAML_ISSUER=MyOverleaf
  OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Log in with SAML Provider'
  OVERLEAF_SAML_EMAIL_FIELD=Email
  OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
  OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
  OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_SIGNATURE_ALGORITHM=
  ```
</Accordion>

## Paso a paso: goauthentik

Esta guía describe una configuración probada con [goauthentik](https://goauthentik.io/). Sustituye `https://overleaf.example.com` por tu `OVERLEAF_SITE_URL` y `https://authentik.example.com` por la dirección de tu Authentik.

<Steps>
  <Step title="Crear el proveedor y la aplicación">
    En Authentik, 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`, y haz clic en **Next**:

    <Frame caption="Authentik: nombre y slug de la aplicación">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=e2405f63578ab00991ad5046665eab32" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-app.png" />
    </Frame>

    2\. Elige **SAML Provider** y haz clic en **Next**:

    <Frame caption="Authentik: elegir el proveedor SAML">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=537780362698d5088132048754ac6481" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-type.png" />
    </Frame>

    3\. Rellena los datos del proveedor:

    * **Authorization Flow**: `default-provider-authorization-implicit-consent`
    * **ACS URL**: `https://overleaf.example.com/saml/login/callback`
    * **Audience**: un nombre para Overleaf, por ejemplo `overleaf`. Overleaf lo envía como `OVERLEAF_SAML_ISSUER`.

    <Frame caption="Authentik: el proveedor SAML de la aplicación">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4f15b87b90b355e13831b95c07abe427" alt="" width="1120" height="810" data-path="images/on-premises/saml-authentik-create.png" />
    </Frame>

    4\. Abre **Advanced protocol settings** y establece:

    * **Signing Certificate**: un certificado, por ejemplo `authentik Self-signed Certificate`
    * **Sign assertions** y **Sign responses**: ambos activados
    * **Service Provider Binding**: `Post`

    <Frame caption="Authentik: firma y binding de un proveedor probado (instancia de prueba)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-advanced.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=39b136a219fb192ed42d337de0058166" alt="" width="1089" height="417" data-path="images/on-premises/saml-authentik-advanced.png" />
    </Frame>

    5\. Haz clic en **Next** hasta llegar a la última página y envía la aplicación.
  </Step>

  <Step title="Copiar los valores de la página del proveedor">
    Vuelve a abrir el proveedor. Todo lo que Overleaf necesita está en su vista general:

    <Frame caption="Authentik: vista general de un proveedor SAML (instancia de prueba)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/saml-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=b73f3aa817b7a18286db6d810ab3b2e9" alt="" width="990" height="963" data-path="images/on-premises/saml-authentik-provider.png" />
    </Frame>

    | En la página del proveedor | Variable de entorno |
    | - | - |
    | **SAML Endpoint** | `OVERLEAF_SAML_ENTRYPOINT` y `OVERLEAF_SAML_LOGOUT_URL` |
    | **Audience** | `OVERLEAF_SAML_ISSUER` |
    | **Download signing certificate** (un archivo) | `OVERLEAF_SAML_IDP_CERT`, consulta el paso siguiente |

    <Warning>
      **EntityID/Issuer** en **SAML Configuration** es el nombre del propio Authentik. No lo pongas en `OVERLEAF_SAML_ISSUER`; usa el valor de **Audience**.
    </Warning>
  </Step>

  <Step title="Instalar el certificado de firma">
    Haz clic en **Download** en **Download signing certificate** y guarda el archivo como `data/overleaf/certs/idp_cert.pem` en tu directorio del Toolkit. El contenedor lo ve como `/var/lib/overleaf/certs/idp_cert.pem`:

    ```dotenv theme={null}
    OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
    ```
  </Step>

  <Step title="Asignar los atributos">
    Authentik envía sus atributos con estos nombres:

    ```dotenv theme={null}
    OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
    OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
    ```

    Los grupos llegan como `http://schemas.xmlsoap.org/claims/Group`, en forma de lista. Para que los miembros del grupo `Admins` de Authentik sean administradores de Overleaf:

    ```dotenv theme={null}
    OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
    OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
    ```

    <Warning>
      El indicador de administrador se actualiza en cada inicio de sesión SAML. Con un campo o un valor incorrecto, todos los administradores que inicien sesión mediante SAML pierden los derechos de administrador. Prueba primero la asignación con una segunda cuenta de administrador.
    </Warning>
  </Step>
</Steps>

<Accordion title="Archivo variables.env probado para goauthentik">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=saml
  OVERLEAF_SAML_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_SAML_ENTRYPOINT=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_LOGOUT_URL=https://authentik.example.com/application/saml/overleaf/
  OVERLEAF_SAML_ISSUER=overleaf
  OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
  OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED=true
  OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED=true
  OVERLEAF_SAML_USER_ID_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_EMAIL_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  OVERLEAF_SAML_FIRST_NAME_FIELD=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
  OVERLEAF_SAML_LAST_NAME_FIELD=http://schemas.goauthentik.io/2021/02/saml/username
  OVERLEAF_SAML_IS_ADMIN_FIELD=http://schemas.xmlsoap.org/claims/Group
  OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE=Admins
  OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.