> ## 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.

# Аутентификация SAML

<Info>
  Эта функция разработана в [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Здесь мы приводим документацию по её настройке.
</Info>

### Настройка

Внутри модуль SAML в Overleaf использует библиотеку [passport-saml](https://github.com/node-saml/passport-saml); большинство приведённых ниже параметров конфигурации передаются в `passport-saml` без изменений. Если у вас возникают проблемы с настройкой SAML, стоит прочитать README для `passport-saml`, чтобы понять, какую конфигурацию она ожидает.

Для включения модуля аутентификации SAML необходима переменная окружения `EXTERNAL_AUTH`. Она определяет, какие внешние методы аутентификации активированы. Значением этой переменной является список. Если список содержит `saml`, будет активирована аутентификация SAML.

Например: `EXTERNAL_AUTH=ldap saml`

При использовании метода аутентификации SAML пользователь перенаправляется на сайт аутентификации поставщика удостоверений (IdP). Если IdP успешно аутентифицирует пользователя, в базе данных пользователей Overleaf выполняется поиск записи, содержащей поле `samlIdentifiers` следующей структуры:

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

Значение `externalUserId` должно совпадать со значением свойства, указанного в `userIdAttribute`, в профиле пользователя, возвращаемом сервером IdP.

Если подходящая запись не найдена, в базе данных выполняется поиск пользователя, основной адрес электронной почты которого совпадает с адресом в профиле пользователя IdP:

* Если такой пользователь найден, поле `hashedPassword` удаляется, чтобы отключить локальную аутентификацию, и добавляется поле `samlIdentifiers`.
* Если подходящий пользователь не найден, создаётся новый пользователь с адресом электронной почты и `samlIdentifiers` из профиля IdP.

<strong>Примечание:</strong> в настоящее время поддерживается только один SAML IdP. Поле `providerId` в `samlIdentifiers` всегда имеет значение `'1'`.

#### Переменные окружения

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Отображаемое имя службы идентификации, используемое на странице входа (по умолчанию: `Log in with SAML IdP`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * Значение этого атрибута будет использоваться Overleaf как внешний идентификатор пользователя; по умолчанию `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Имя поля адреса электронной почты в профиле пользователя; по умолчанию `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Имя поля firstName в профиле пользователя; по умолчанию `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Имя поля lastName в профиле пользователя; по умолчанию `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Если установлено значение `true`, при входе обновляются поля пользователя `first_name` и `last_name`, а форма сведений о пользователе на странице `/user/settings` отключается.
* `OVERLEAF_SAML_ENTRYPOINT` <strong>(обязательно)</strong>
  * URL точки входа службы идентификации SAML.
    * Пример: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Пример для Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` <strong>(обязательно)</strong>
  * Имя издателя (Issuer).
* `OVERLEAF_SAML_AUDIENCE`
  * Ожидаемое значение Audience в ответе SAML; по умолчанию равно значению `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` <strong>(обязательно)</strong>
  * Путь к файлу с открытым сертификатом поставщика удостоверений, который используется для проверки подписей входящих ответов SAML. Если у поставщика удостоверений несколько действительных сертификатов подписи, можно указать JSON-массив путей к сертификатам.
    * Пример (один сертификат): `/var/lib/overleaf/certs/idp_cert.pem`
    * Пример (несколько сертификатов): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Путь к файлу с открытым сертификатом подписи, который встраивается в запросы аутентификации, чтобы IdP мог проверить подписи входящего запроса SAML. Он необходим при настройке [эндпоинта метаданных](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider), если стратегия настроена с `OVERLEAF_SAML_PRIVATE_KEY`. Для поддержки ротации сертификатов можно указать JSON-массив путей к сертификатам. При передаче массива сертификатов первый элемент массива должен соответствовать текущему `OVERLEAF_SAML_PRIVATE_KEY`. Дополнительные элементы массива можно использовать, чтобы заранее опубликовать для IdP будущие сертификаты до смены `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Путь к файлу с закрытым ключом в формате PEM, соответствующим `OVERLEAF_SAML_PUBLIC_CERT`, который используется для подписи запросов аутентификации, отправляемых passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Путь к файлу с открытым сертификатом, используемым для [эндпоинта метаданных](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Путь к файлу с закрытым ключом, соответствующим `OVERLEAF_SAML_DECRYPTION_CERT`, который будет использоваться для попытки расшифровать полученные зашифрованные утверждения (assertions).
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Необязательно задаёт алгоритм подписи запросов; допустимые значения: 'sha1' (по умолчанию), 'sha256' (предпочтительно), 'sha512' (наиболее безопасно, проверьте, поддерживает ли его ваш IdP).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * JSON-словарь дополнительных параметров запроса, добавляемых ко всем запросам.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * JSON-словарь дополнительных параметров запроса, добавляемых к запросам 'authorize'.
    * Пример: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Формат идентификатора имени, запрашиваемый у поставщика удостоверений (по умолчанию: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). При использовании `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` убедитесь, что задана переменная окружения `OVERLEAF_SAML_EMAIL_FIELD`. Если требуется `urn:oasis:names:tc:SAML:2.0:nameid-format:transient`, необходимо также задать переменную окружения `OVERLEAF_SAML_USER_ID_FIELD`, которой можно, например, присвоить адрес электронной почты пользователя.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Допустимое расхождение часов между клиентом и сервером в миллисекундах при проверке временных меток условий утверждения OnBefore и NotOnOrAfter. Значение -1 полностью отключает проверку этих условий. По умолчанию 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * Атрибут `AttributeConsumingServiceIndex`, добавляемый в AuthnRequest, чтобы указать IdP, какой набор атрибутов прикрепить к ответу ([ссылка](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * JSON-массив значений формата идентификатора имени для запроса контекста аутентификации. По умолчанию: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Если `true`, первоначальный запрос SAML от поставщика услуг указывает, что IdP должен принудительно повторно аутентифицировать пользователя, даже если у него есть действующий сеанс.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Если `true`, конкретный контекст аутентификации не запрашивается. Например, можно установить значение `true`, чтобы разрешить дополнительные контексты, такие как вход без пароля (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). Поддержка дополнительных контекстов зависит от вашего IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Если установлено значение `HTTP-POST`, аутентификация у IdP будет запрашиваться через привязку HTTP POST; в противном случае по умолчанию используется HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Если `always`, InResponseTo будет проверяться во входящих ответах SAML.
  * Если `never`, InResponseTo не будет проверяться (по умолчанию).
  * Если `ifPresent`, InResponseTo будет проверяться, только если присутствует во входящем ответе SAML.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` и `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Если установлено значение `true` (по умолчанию), Overleaf ожидает, что утверждения SAML (Assertions) или, соответственно, весь ответ аутентификации SAML будут подписаны IdP. Если оба параметра равны `false`, должно быть подписано хотя бы одно из утверждений или ответ.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Задаёт срок, по истечении которого идентификатор запроса (Request ID), сгенерированный для запроса SAML, будет считаться недействительным, если встретится в ответе SAML в поле `InResponseTo`. По умолчанию: 28800000 (8 часов).
* `OVERLEAF_SAML_LOGOUT_URL`
  * Базовый адрес для отправки запросов на выход (по умолчанию: `entryPoint`).
    * Пример: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * JSON-словарь дополнительных параметров запроса, добавляемых к запросам 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` и `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Если заданы обе переменные окружения, в процессе входа устанавливается `user.isAdmin = true`, если профиль, возвращённый SAML IdP, содержит атрибут, указанный в `OVERLEAF_SAML_IS_ADMIN_FIELD`, и его значение либо совпадает с `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`, либо является массивом, содержащим `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`; в противном случае `user.isAdmin` устанавливается в `false`. Если хотя бы одна из этих переменных не задана, статус администратора устанавливается в `true` только при создании пользователя-администратора в Launchpad.

**Метаданные для поставщика удостоверений**

Текущая версия Overleaf CE включает эндпоинт для получения метаданных поставщика услуг (Service Provider): `http://my-overleaf-instance.com/saml/meta`

Поставщик удостоверений должен быть настроен так, чтобы распознавать сервер Overleaf как «поставщика услуг» (Service Provider). Инструкции по этой настройке см. в документации вашего сервера SAML.

Ниже приведён пример подходящих метаданных поставщика услуг:

<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>

Обратите внимание на сертификаты, `AssertionConsumerService.Location`, `SingleLogoutService.Location` и `EntityDescriptor.entityID` и задайте соответствующие значения в конфигурации вашего IdP либо отправьте файл метаданных администратору IdP.

<Accordion title="Пример файла variables.env (минимальный)">
  ```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>

## Пошаговая инструкция: goauthentik

Здесь описана настройка, проверенная с [goauthentik](https://goauthentik.io/). Замените `https://overleaf.example.com` на ваш `OVERLEAF_SITE_URL`, а `https://authentik.example.com` — на адрес вашего Authentik.

<Steps>
  <Step title="Создайте провайдер и приложение">
    В Authentik откройте **Applications > Applications** и нажмите **New Application**. Мастер создаёт приложение и его провайдер одновременно.

    1\. Задайте приложению имя и slug, например `overleaf`, и нажмите **Next**:

    <Frame caption="Authentik: имя и slug приложения">
      <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\. Выберите **SAML Provider** и нажмите **Next**:

    <Frame caption="Authentik: выбор провайдера 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\. Заполните параметры провайдера:

    * **Authorization Flow**: `default-provider-authorization-implicit-consent`
    * **ACS URL**: `https://overleaf.example.com/saml/login/callback`
    * **Audience**: имя для Overleaf, например `overleaf`. Overleaf передаёт его как `OVERLEAF_SAML_ISSUER`.

    <Frame caption="Authentik: SAML-провайдер приложения">
      <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\. Откройте **Advanced protocol settings** и установите:

    * **Signing Certificate**: сертификат, например `authentik Self-signed Certificate`
    * **Sign assertions** и **Sign responses**: оба включены
    * **Service Provider Binding**: `Post`

    <Frame caption="Authentik: подпись и binding проверенного провайдера (тестовый экземпляр)">
      <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\. Нажимайте **Next** до последней страницы и отправьте приложение.
  </Step>

  <Step title="Скопируйте значения со страницы провайдера">
    Снова откройте провайдер. Всё, что нужно Overleaf, есть на странице обзора:

    <Frame caption="Authentik: обзор SAML-провайдера (тестовый экземпляр)">
      <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>

    | На странице провайдера | Переменная окружения |
    | - | - |
    | **SAML Endpoint** | `OVERLEAF_SAML_ENTRYPOINT` и `OVERLEAF_SAML_LOGOUT_URL` |
    | **Audience** | `OVERLEAF_SAML_ISSUER` |
    | **Download signing certificate** (файл) | `OVERLEAF_SAML_IDP_CERT`, см. следующий шаг |

    <Warning>
      **EntityID/Issuer** в разделе **SAML Configuration** — это имя самого Authentik. Не указывайте его в `OVERLEAF_SAML_ISSUER`, используйте **Audience**.
    </Warning>
  </Step>

  <Step title="Установите сертификат подписи">
    Нажмите **Download** в разделе **Download signing certificate** и сохраните файл как `data/overleaf/certs/idp_cert.pem` в каталоге Toolkit. Контейнер видит его как `/var/lib/overleaf/certs/idp_cert.pem`:

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

  <Step title="Сопоставьте атрибуты">
    Authentik передаёт свои атрибуты под следующими именами:

    ```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
    ```

    Группы передаются как `http://schemas.xmlsoap.org/claims/Group` в виде списка. Чтобы члены группы Authentik `Admins` стали администраторами Overleaf:

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

    <Warning>
      Флаг администратора обновляется при каждом входе через SAML. При неверном поле или значении каждый администратор, вошедший через SAML, теряет права администратора. Сначала проверьте сопоставление на второй учётной записи администратора.
    </Warning>
  </Step>
</Steps>

<Accordion title="Проверенный variables.env для 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.