Что такое 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 в форме входа, после чего выполняется следующее:
- В каталоге LDAP выполняется поиск пользователя LDAP с использованием фильтра, заданного в
OVERLEAF_LDAP_SEARCH_FILTER, и пользователь проходит аутентификацию. - Если аутентификация прошла успешно, в базе пользователей Overleaf ищется пользователь, основной адрес электронной почты которого совпадает с адресом электронной почты аутентифицированного пользователя LDAP:
- Если подходящий пользователь найден, поле
hashedPasswordэтого пользователя удаляется (если оно существует). Это гарантирует, что в дальнейшем пользователь сможет входить только через LDAP. - Если подходящий пользователь не найден, создаётся новый пользователь Overleaf с адресом электронной почты, именем и фамилией, полученными с LDAP-сервера.
- Если подходящий пользователь найден, поле
Переменные окружения
OVERLEAF_LDAP_URL(обязательно)- URL LDAP-сервера.
- Пример:
ldaps://ldap.example.com:636(LDAP поверх SSL) - Пример:
ldap://ldap.example.com:389(без шифрования или STARTTLS, если настроено).
- Пример:
- URL LDAP-сервера.
OVERLEAF_LDAP_IDENTITY_SERVICE_NAME- Отображаемое имя службы удостоверений LDAP, используемое на странице входа.
- По умолчанию
Log in with LDAP Provider.
OVERLEAF_LDAP_EMAIL_ATT- Атрибут электронной почты, возвращаемый LDAP-сервером, по умолчанию
mail. У каждого пользователя LDAP должен быть хотя бы один адрес электронной почты. Если указано несколько адресов, используется только первый.
- Атрибут электронной почты, возвращаемый 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. Если не задано, используется анонимная привязка.
- Отличительное имя (DN) пользователя LDAP, который должен использоваться для подключения к LDAP (этот пользователь должен иметь возможность искать и просматривать учётные записи на LDAP-сервере), например
OVERLEAF_LDAP_BIND_CREDENTIALS- Пароль для
OVERLEAF_LDAP_BIND_DN.
- Пароль для
OVERLEAF_LDAP_BIND_PROPERTY- Свойство пользователя, используемое для привязки к клиенту, по умолчанию
dn.
- Свойство пользователя, используемое для привязки к клиенту, по умолчанию
OVERLEAF_LDAP_SEARCH_BASE(обязательно)- Базовый DN, от которого выполняется поиск пользователей. Например,
ou=people,dc=example,dc=com.
- Базовый DN, от которого выполняется поиск пользователей. Например,
OVERLEAF_LDAP_SEARCH_FILTER- Фильтр поиска LDAP для нахождения пользователя. Используйте литерал ‘{{username}}’, чтобы подставить введённое имя пользователя в поиск LDAP.
- Пример:
(|(uid={{username}})(mail={{username}}))(пользователь может войти с помощью адреса электронной почты или логина). - Пример:
(sAMAccountName={{username}})(Active Directory).
- Пример:
- Фильтр поиска LDAP для нахождения пользователя. Используйте литерал ‘{{username}}’, чтобы подставить введённое имя пользователя в поиск LDAP.
OVERLEAF_LDAP_SEARCH_SCOPE- Область поиска:
base,oneилиsub(по умолчанию).
- Область поиска:
OVERLEAF_LDAP_SEARCH_ATTRIBUTES- JSON-массив атрибутов, запрашиваемых с LDAP-сервера, например
["uid", "mail", "givenName", "sn"]. По умолчанию запрашиваются все атрибуты.
- JSON-массив атрибутов, запрашиваемых с LDAP-сервера, например
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"]
- Пример (один сертификат):
- Путь к файлу с сертификатом CA, используемым для проверки SSL/TLS-сертификата LDAP-сервера. Если сертификатов несколько, можно указать JSON-массив путей к сертификатам. Файлы должны быть доступны Docker-контейнеру.
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.
- Если заданы обе переменные окружения, при входе устанавливается
OVERLEAF_LDAP_CONTACTS_FILTER- Фильтр, используемый для поиска на LDAP-сервере пользователей, загружаемых в контакты. Заполнитель ‘{{userProperty}}’ в фильтре заменяется значением свойства, указанного в
OVERLEAF_LDAP_CONTACTS_PROPERTY, у пользователя LDAP, инициировавшего поиск. Если не задано, пользователи с LDAP-сервера в контакты не загружаются.
- Фильтр, используемый для поиска на LDAP-сервере пользователей, загружаемых в контакты. Заполнитель ‘{{userProperty}}’ в фильтре заменяется значением свойства, указанного в
OVERLEAF_LDAP_CONTACTS_SEARCH_BASE- Базовый DN, с которого начинается поиск контактов. По умолчанию равен
OVERLEAF_LDAP_SEARCH_BASE.
- Базовый DN, с которого начинается поиск контактов. По умолчанию равен
OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE- Область поиска:
base,oneилиsub(по умолчанию).
- Область поиска:
OVERLEAF_LDAP_CONTACTS_PROPERTY- Свойство объекта пользователя, которое подставляется вместо заполнителя ‘{{userProperty}}’ в
OVERLEAF_LDAP_CONTACTS_FILTER.
- Свойство объекта пользователя, которое подставляется вместо заполнителя ‘{{userProperty}}’ в
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE- Значение
OVERLEAF_LDAP_CONTACTS_PROPERTY, если поиск инициирован пользователем, не являющимся пользователем LDAP. Если эта переменная не задана, итоговый фильтр не найдёт ничего. В качестве подстановочного знака можно использовать значение*.
- Значение
Пример
Пример
gid. У пользователей, не являющихся пользователями LDAP, в контактах будут все пользователи LDAP с UNIX gid=1000.Пример файла variables.env
Пример файла variables.env
Пошаговая инструкция: goauthentik
Здесь описана настройка, проверенная с goauthentik. В примерах используется Base DNdc=example,dc=com; замените его на свой.
Создайте учётную запись для bind
ldapservice, и нажмите Create:
Authentik: создание учётной записи для bind
OVERLEAF_LDAP_BIND_CREDENTIALS:
Authentik: установка пароля учётной записи для bind (тестовый экземпляр)
19 в …/#/identity/users/19. Он понадобится на шаге 3.Создайте провайдер и приложение
overleaf-ldap, и нажмите Next:
Authentik: имя и slug приложения

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

Authentik: режимы bind и поиска провайдера LDAP
default-authentication-flow, а Base DN — в ваш Base DN, например dc=example,dc=com:
Authentik: bind flow и Base DN провайдера LDAP
Разрешите учётной записи для bind искать в каталоге
ak-managed-role--user-<number>, затем включите Search full LDAP directory:
Authentik: выдача учётной записи для bind разрешения на поиск (тестовый экземпляр)

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

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

Authentik: обзор провайдера LDAP (тестовый экземпляр)
- Bind DN показывает учётную запись, под которой вы вошли. Вместо неё используйте учётную запись для bind из шага 1:
cn=ldapservice,ou=users,<Base DN>. - Search base показывает Base DN. Используйте
ou=users,<Base DN>.
Проверьте поиск
dn::dn: нет вовсе, обычно это значит, что отсутствует разрешение из шага 3.Назначьте администраторов (необязательно)
memberOf в виде DN в ou=groups. Чтобы члены группы Authentik Admins стали администраторами Overleaf:Проверенный variables.env для goauthentik
Проверенный variables.env для goauthentik

