Skip to main content
Эта функция разработана yu-i-i/overleaf-cep. Здесь мы приводим документацию, которая поможет вам с настройкой.
Overleaf использует библиотеку passport-ldapauth, которая довольно устарела, поэтому совместимость с LDAP не может быть полностью гарантирована. С некоторыми поставщиками удостоверений LDAP (например, https://goauthentik.io/) возможны сбои при входе. Поэтому по возможности рекомендуется в первую очередь использовать OAuth/SAML. Для goauthentik следуйте разделу Пошаговая инструкция: goauthentik ниже, который проверен на практике.

Что такое LDAP

LDAP — это протокол аутентификации, используемый для внешней проверки подлинности. Overleaf Server Pro предоставляет в веб-интерфейсе отдельную форму входа через LDAP, независимую от стандартного способа аутентификации. Когда пользователь вводит своё имя пользователя и пароль LDAP, бэкенд Overleaf проверяет учётные данные на настроенном LDAP-сервере, например ldap://ldap:10389.

Пример LDAP в Server Pro

Настройка

Внутри Overleaf LDAP использует библиотеку passport-ldapauth. Большинство параметров конфигурации передаются в объект конфигурации server, который используется для настройки passport-ldapauth. Если у вас возникают проблемы с настройкой LDAP, стоит прочитать README passport-ldapauth, чтобы понять, какую конфигурацию она ожидает. Для включения модуля аутентификации LDAP требуется переменная окружения EXTERNAL_AUTH. Эта переменная определяет, какие внешние методы аутентификации включены. Её значение — список. Если список содержит ldap, аутентификация через LDAP будет включена. Например: EXTERNAL_AUTH=ldap saml В отличие от Overleaf CEP, в нашей редакции ayaka-notes аутентификация через LDAP ограничена ролью исключительно метода аутентификации и доступна по адресу http://your-overleaf.com/ldap/login. При использовании аутентификации через LDAP пользователь вводит username и password в форме входа, после чего выполняется следующее:
  1. В каталоге LDAP выполняется поиск пользователя LDAP с использованием фильтра, заданного в OVERLEAF_LDAP_SEARCH_FILTER, и пользователь проходит аутентификацию.
  2. Если аутентификация прошла успешно, в базе пользователей Overleaf ищется пользователь, основной адрес электронной почты которого совпадает с адресом электронной почты аутентифицированного пользователя LDAP:
    • Если подходящий пользователь найден, поле hashedPassword этого пользователя удаляется (если оно существует). Это гарантирует, что в дальнейшем пользователь сможет входить только через LDAP.
    • Если подходящий пользователь не найден, создаётся новый пользователь Overleaf с адресом электронной почты, именем и фамилией, полученными с LDAP-сервера.
Для пользователей, входящих через LDAP, мы не храним хеши паролей в базе данных mongo Overleaf (а существующие удаляем).

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

  • OVERLEAF_LDAP_URL (обязательно)
    • URL LDAP-сервера.
      • Пример: ldaps://ldap.example.com:636 (LDAP поверх SSL)
      • Пример: ldap://ldap.example.com:389 (без шифрования или STARTTLS, если настроено).
  • OVERLEAF_LDAP_IDENTITY_SERVICE_NAME
    • Отображаемое имя службы удостоверений LDAP, используемое на странице входа.
    • По умолчанию Log in with LDAP Provider.
  • OVERLEAF_LDAP_EMAIL_ATT
    • Атрибут электронной почты, возвращаемый LDAP-сервером, по умолчанию mail. У каждого пользователя LDAP должен быть хотя бы один адрес электронной почты. Если указано несколько адресов, используется только первый.
  • OVERLEAF_LDAP_FIRST_NAME_ATT
    • Имя свойства, содержащего имя пользователя, используемое в приложении, обычно givenName.
  • OVERLEAF_LDAP_LAST_NAME_ATT
    • Имя свойства, содержащего фамилию пользователя, используемую в приложении, обычно sn.
  • OVERLEAF_LDAP_NAME_ATT
    • Имя свойства, содержащего полное имя пользователя, обычно cn. Если какая-либо из двух предыдущих переменных не задана, имя и/или фамилия пользователя извлекаются из этой переменной. В противном случае она не используется.
  • OVERLEAF_LDAP_PLACEHOLDER
    • Текст-заполнитель для формы входа, по умолчанию Username.
  • OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN
    • Если задано true, при входе обновляются поля first_name и last_name пользователя LDAP, а форма данных пользователя на странице /user/settings для пользователей LDAP отключается. В противном случае данные загружаются только при первом входе.
  • OVERLEAF_LDAP_BIND_DN
    • Отличительное имя (DN) пользователя LDAP, который должен использоваться для подключения к LDAP (этот пользователь должен иметь возможность искать и просматривать учётные записи на LDAP-сервере), например cn=ldap_reader,dc=example,dc=com. Если не задано, используется анонимная привязка.
  • OVERLEAF_LDAP_BIND_CREDENTIALS
    • Пароль для OVERLEAF_LDAP_BIND_DN.
  • OVERLEAF_LDAP_BIND_PROPERTY
    • Свойство пользователя, используемое для привязки к клиенту, по умолчанию dn.
  • OVERLEAF_LDAP_SEARCH_BASE (обязательно)
    • Базовый DN, от которого выполняется поиск пользователей. Например, ou=people,dc=example,dc=com.
  • OVERLEAF_LDAP_SEARCH_FILTER
    • Фильтр поиска LDAP для нахождения пользователя. Используйте литерал ‘{{username}}’, чтобы подставить введённое имя пользователя в поиск LDAP.
      • Пример: (|(uid={{username}})(mail={{username}})) (пользователь может войти с помощью адреса электронной почты или логина).
      • Пример: (sAMAccountName={{username}}) (Active Directory).
  • OVERLEAF_LDAP_SEARCH_SCOPE
    • Область поиска: base, one или sub (по умолчанию).
  • OVERLEAF_LDAP_SEARCH_ATTRIBUTES
    • JSON-массив атрибутов, запрашиваемых с LDAP-сервера, например ["uid", "mail", "givenName", "sn"]. По умолчанию запрашиваются все атрибуты.
  • OVERLEAF_LDAP_STARTTLS
    • Если true, используется LDAP поверх TLS.
  • OVERLEAF_LDAP_TLS_OPTS_CA_PATH
    • Путь к файлу с сертификатом CA, используемым для проверки SSL/TLS-сертификата LDAP-сервера. Если сертификатов несколько, можно указать JSON-массив путей к сертификатам. Файлы должны быть доступны Docker-контейнеру.
      • Пример (один сертификат): /var/lib/overleaf/certs/ldap_ca_cert.pem
      • Пример (несколько сертификатов): ["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]
  • OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH
    • Если true, сертификат сервера проверяется по списку предоставленных CA.
  • OVERLEAF_LDAP_CACHE
    • Если true, до 100 учётных данных одновременно будут кешироваться на 5 минут.
  • OVERLEAF_LDAP_TIMEOUT
    • Сколько времени клиент ожидает выполнения операций до истечения тайм-аута, мс (по умолчанию: Infinity).
  • OVERLEAF_LDAP_CONNECT_TIMEOUT
    • Сколько времени клиент ожидает установления TCP-соединения до истечения тайм-аута, мс (по умолчанию: значение ОС).
  • OVERLEAF_LDAP_IS_ADMIN_ATT и OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE
    • Если заданы обе переменные окружения, при входе устанавливается user.isAdmin = true, если профиль LDAP содержит атрибут, указанный в OVERLEAF_LDAP_IS_ADMIN_ATT, а его значение совпадает с OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE или является массивом, содержащим OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE; в противном случае user.isAdmin устанавливается в false. Если хотя бы одна из этих переменных не задана, статус администратора устанавливается в true только при создании пользователя-администратора в Launchpad.
Следующие пять переменных определяют, как контакты пользователя загружаются с LDAP-сервера.
  • OVERLEAF_LDAP_CONTACTS_FILTER
    • Фильтр, используемый для поиска на LDAP-сервере пользователей, загружаемых в контакты. Заполнитель ‘{{userProperty}}’ в фильтре заменяется значением свойства, указанного в OVERLEAF_LDAP_CONTACTS_PROPERTY, у пользователя LDAP, инициировавшего поиск. Если не задано, пользователи с LDAP-сервера в контакты не загружаются.
  • OVERLEAF_LDAP_CONTACTS_SEARCH_BASE
    • Базовый DN, с которого начинается поиск контактов. По умолчанию равен OVERLEAF_LDAP_SEARCH_BASE.
  • OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE
    • Область поиска: base, one или sub (по умолчанию).
  • OVERLEAF_LDAP_CONTACTS_PROPERTY
    • Свойство объекта пользователя, которое подставляется вместо заполнителя ‘{{userProperty}}’ в OVERLEAF_LDAP_CONTACTS_FILTER.
  • OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE
    • Значение OVERLEAF_LDAP_CONTACTS_PROPERTY, если поиск инициирован пользователем, не являющимся пользователем LDAP. Если эта переменная не задана, итоговый фильтр не найдёт ничего. В качестве подстановочного знака можно использовать значение *.
В приведённом примере в контакты текущего пользователя LDAP загружаются все пользователи LDAP с тем же UNIX gid. У пользователей, не являющихся пользователями LDAP, в контактах будут все пользователи LDAP с UNIX gid=1000.

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

Здесь описана настройка, проверенная с goauthentik. В примерах используется Base DN dc=example,dc=com; замените его на свой.
1

Создайте учётную запись для bind

Сначала Overleaf входит в каталог под собственной учётной записью, чтобы найти пользователя. В Authentik откройте Directory > Users, нажмите New User, выберите Internal User и нажмите Next. Введите имя пользователя, например ldapservice, и нажмите Create:

Authentik: создание учётной записи для bind

Откройте нового пользователя и нажмите Set password. Этот пароль указывается в OVERLEAF_LDAP_BIND_CREDENTIALS:

Authentik: установка пароля учётной записи для bind (тестовый экземпляр)

Запомните номер пользователя в адресной строке, например 19 в …/#/identity/users/19. Он понадобится на шаге 3.
2

Создайте провайдер и приложение

Откройте Applications > Applications и нажмите New Application. Мастер создаёт приложение и его провайдер одновременно.1. Задайте приложению имя и slug, например overleaf-ldap, и нажмите Next:

Authentik: имя и slug приложения

2. Выберите LDAP Provider и нажмите Next:

Authentik: выбор провайдера LDAP

3. Установите Bind Mode в Direct binding, а Search Mode в Direct querying:

Authentik: режимы bind и поиска провайдера LDAP

4. Ниже установите Bind Flow в default-authentication-flow, а Base DN — в ваш Base DN, например dc=example,dc=com:

Authentik: bind flow и Base DN провайдера LDAP

5. Нажимайте Next до последней страницы и отправьте приложение.
3

Разрешите учётной записи для bind искать в каталоге

Без этого разрешения учётная запись для bind видит только саму себя, поиск не находит ни одного пользователя, и любой вход через LDAP завершается ошибкой.Откройте провайдер, перейдите в Permissions и нажмите Assign Role Object Permission. В поле Role введите номер из шага 1 и выберите ak-managed-role--user-<number>, затем включите Search full LDAP directory:

Authentik: выдача учётной записи для bind разрешения на поиск (тестовый экземпляр)

После этого у роли появится галочка в столбце Search full LDAP directory:

Authentik: разрешения провайдера LDAP (тестовый экземпляр)

4

Запустите LDAP outpost

Authentik отвечает на запросы LDAP через outpost — отдельный контейнер. Откройте Applications > Outposts, создайте outpost типа LDAP с вашим провайдером и разверните его, как описано в документации Authentik. Он слушает порт 389 на хосте, где запущен. Когда он подключён, отображается зелёная галочка:

Authentik: работающий LDAP outpost (тестовый экземпляр)

5

Заполните DN

На странице провайдера показаны Base DN и пример в разделе How to connect:

Authentik: обзор провайдера LDAP (тестовый экземпляр)

Не копируйте значения из примера как есть:
  • Bind DN показывает учётную запись, под которой вы вошли. Вместо неё используйте учётную запись для bind из шага 1: cn=ldapservice,ou=users,<Base DN>.
  • Search base показывает Base DN. Используйте ou=users,<Base DN>.
Authentik хранит в ou=virtual-groups группу с именем каждого пользователя. Поиск (cn=alice) по всему Base DN находит и cn=alice,ou=users,…, и cn=alice,ou=virtual-groups,…, а Overleaf отклоняет вход, если найдено больше одной записи. Оставьте базу поиска равной ou=users,<Base DN>.
6

Проверьте поиск

Перед запуском Overleaf выполните тот же поиск, который будет выполнять он. Команда должна вывести ровно одну строку dn::
Если dn: нет вовсе, обычно это значит, что отсутствует разрешение из шага 3.
7

Назначьте администраторов (необязательно)

Группы пользователя находятся в memberOf в виде DN в ou=groups. Чтобы члены группы Authentik Admins стали администраторами Overleaf:
Флаг администратора обновляется при каждом входе через LDAP. При неверном атрибуте или значении каждый администратор, вошедший через LDAP, теряет права администратора. Сначала проверьте сопоставление на второй учётной записи администратора.
variables.env
Последнее изменение 6 октября 2026 г.