Перейти к основному содержимому

Аутентификация через LDAP

Примечание

Эта интеграция работает только с локальным развертыванием. Интеграция с внешними IAM-провайдерами для SaaS-решений будет введена в начале 2024 года.

LDAP — это популярный протокол для поиска учетных записей пользователей на специальном сервере, таком как Active Directory или OpenLDAP. Если вы настроите ТестОпс для использования LDAP-сервера, пользователи смогут использовать свои существующие учетные данные без необходимости регистрировать новые учетные записи в самом ТестОпс.

Важно

Обратите внимание, что интеграция с LDAP-сервером не является самым простым методом аутентификации для настройки. Значительным фактором здесь является то, что протокол очень гибок в отношении используемых запросов и имен параметров. Разные LDAP-серверы могут иметь очень разные параметры, поэтому никогда не может быть простого примера «скопируй, вставь и запусти».

Пожалуйста, убедитесь, что вы хорошо понимаете, как настроен ваш LDAP-сервер, или проконсультируйтесь с коллегой, который это знает.

Как это работает

Диаграмма выше показывает шаги типичного успешного взаимодействия между пользователем, экземпляром ТестОпс и LDAP-сервером.

  1. ТестОпс подключается к LDAP-серверу с использованием служебной учетной записи.

  2. На странице входа пользователь вводит свои учетные данные: имя пользователя (или адрес электронной почты) и пароль.

    В зависимости от конфигурации, ТестОпс может преобразовать имя пользователя в нижний регистр перед продолжением.

  3. ТестОпс выполняет запрос LDAP, чтобы проверить, существует ли учетная запись с указанными учетными данными.

    В зависимости от конфигурации для этого запроса могут использоваться либо фильтр поиска, либо шаблоны DN. Обратите внимание, что эти два варианта взаимоисключающие, и вы не должны настраивать одновременно и фильтр поиска, и шаблоны DN.

  4. LDAP-сервер возвращает полные данные учетной записи, включая ее уникальный идентификатор (UID) и группы, к которым она принадлежит.

    На этом этапе ТестОпс пытается загрузить ранее созданную внутреннюю учетную запись, соответствующую указанному UID. Если она не существует, ТестОпс создает ее на лету. Обратите внимание, что ТестОпс отключает локальную аутентификацию для учетной записи, т.е. вы не можете иметь учетную запись с разрешенными как стандартным, так и LDAP методами.

    В зависимости от конфигурации, ТестОпс может или не может обновлять существующие учетные записи, чтобы соответствовать данным с LDAP-сервера. А именно, он может обновлять полное имя, электронную почту, изображение аватара и роли учетных записей.

  5. ТестОпс перенаправляет пользователя на страницу, которую он хотел посетить, или на главную страницу.

Параметры

Отредактируйте следующие параметры в файле values.yaml.

  • Подключение к LDAP-серверу

    • auth.ldap.enabled — должно быть true.
    • auth.ldap.url — расположение LDAP-сервера.
    • auth.ldap.auth.user — запрос для загрузки служебной учетной записи.
    • auth.ldap.auth.pass — пароль служебной учетной записи.
  • Имена атрибутов LDAP

    • auth.ldap.uidAttribute — имя атрибута, который хранит уникальный идентификатор каждого пользователя.
    • auth.ldap.passwordAttribute — имя атрибута, который хранит пароль каждого пользователя.
    • auth.ldap.usernamesToLowercase — если true, имя пользователя будет преобразовано в нижний регистр перед поиском.
    • auth.ldap.group.roleAttribute — имя атрибута, который хранит роль каждой группы.
    • auth.ldap.syncRoles — если true, ТестОпс будет перезагружать группы из LDAP при каждой попытке входа.
  • Сопоставление групп

    • auth.ldap.userGroupName — список ролей LDAP, разделенных запятыми, которые соответствуют роли «Пользователи» в ТестОпс.
    • auth.ldap.adminGroupName — список ролей LDAP, разделенных запятыми, которые соответствуют роли «Администраторы» в ТестОпс.
    • allure.auth.defaultRole — роль ТестОпс, которая должна использоваться для пользователей LDAP, которые не принадлежат ни к «Пользователям», ни к «Администраторам». Допустимые значения: «ROLE_ADMIN», «ROLE_USER», «ROLE_GUEST».
  • Параметры поиска пользователей

    • auth.ldap.user.searchBase — начальная точка для поиска пользователей.
    • auth.ldap.user.searchFilter — фильтр для поиска пользователей.
    • auth.ldap.user.dnPatterns — список шаблонов, разделенных запятыми, для поиска пользователей.
  • Параметры поиска групп

    • auth.ldap.group.searchBase — начальная точка для поиска групп.
    • auth.ldap.group.searchFilter — фильтр для поиска групп.

Примеры

LDAP_URL="ldaps://ldaps.space:636"
LDAP_USER_SEARCH_BASE="ou=People,dc=space"
LDAP_USER_SEARCH_FILTER="uid={0}"

LDAP_SYNC_ROLES=false
LDAP_GROUP_SEARCH_BASE="ou=group,dc=space"
LDAP_GROUP_SEARCH_FILTER="memberUid={1}"
LDAP_GROUP_ROLE_ATTRIBUTE=cn
LDAP_UID_ATTRIBUTE=uid

LDAP_MAPPING_ROLE_USERS=atousers,every_user_is_user
LDAP_MAPPING_ROLE_ADMINS=atoadmins,every_user_is_admin

# Default role, can be ROLE_GUEST/ROLE_USER/ROLE_ADMIN
LDAP_DEFAULT_ROLE=ROLE_GUEST

LDAP_LOGIN_SA="cn=admin,dc=space"
LDAP_LOGIN_SA_PASS=SeriviceAccountPassword_Here
ALLURE_LOGIN_PRIMARY=ldap
ALLURE_LOGIN_LDAP_ENABLED='true'
ALLURE_LOGIN_LDAP_REFERRAL=follow
ALLURE_LOGIN_LDAP_URL=ldap://ldap.url.here:port
# ALLURE_LOGIN_LDAP_USERDNPATTERNS= do not use with ALLURE_LOGIN_LDAP_USERSEARCHFILTER
ALLURE_LOGIN_LDAP_USERSEARCHBASE="ou=People,dc=space"
ALLURE_LOGIN_LDAP_USERSEARCHFILTER="uid={0}"
ALLURE_LOGIN_LDAP_DEFAULTROLE=${LDAP_DEFAULT_ROLE}
ALLURE_LOGIN_LDAP_UIDATTRIBUTE=uid
ALLURE_LOGIN_LDAP_SYNCROLES='true'
# these are to be enabled if ALLURE_LOGIN_LDAP_SYNCROLES='true'
ALLURE_LOGIN_LDAP_GROUPSEARCHBASE="ou=group,dc=space"
ALLURE_LOGIN_LDAP_GROUPSEARCHFILTER="memberUid={1}"
ALLURE_LOGIN_LDAP_GROUPROLEATTRIBUTE=cn

ALLURE_LOGIN_LDAP_GROUPAUTHORITIES_ROLEUSERGROUPS=group_with_ato_users,every_user_is_user
ALLURE_LOGIN_LDAP_GROUPAUTHORITIES_ROLEADMINGROUPS=group_with_ato_admins,every_user_is_admin
# service account data to log-in to LDAP
ALLURE_LOGIN_LDAP_USERDN="cn=admin,dc=space"
ALLURE_LOGIN_LDAP_PASSWORD='ServiceAccountPasswordHere'
# additional parameters, can be disabled by default
#ALLURE_LOGIN_LDAP_LOWERCASEUSERNAMES=true
#ALLURE_LOGIN_LDAP_PASSWORDATTRIBUTE=userPassword
ldapsearch \
-H 'ldap://ldap.example.com:389' \
-D 'cn=admin,dc=example,dc=com' \
-w 'SecretPa$$w0rd' \
-b 'dc=example,dc=com' \
'(&((objectClass=Person))(uid=ivanivanov))'

Аргументы соответствуют следующим параметрам конфигурации:

  • -Hauth.ldap.url,
  • -Dauth.ldap.auth.user,
  • -wauth.ldap.auth.pass,
  • -bauth.ldap.user.searchBase,
  • запрос — auth.ldap.user.searchFilter или auth.ldap.user.dnPatterns с именем пользователя вместо {0}.

Использование LDAP вместе со стандартной аутентификацией

Обычно, когда компания настраивает аутентификацию LDAP для ТестОпс, этот сервер считается источником истины о учетных записях пользователей, и LDAP устанавливается как основной способ аутентификации. Однако могут возникнуть ситуации, когда вам нужно использовать локальную аутентификацию, например, когда вы хотите войти как администратор экземпляра. Для таких случаев ТестОпс позволяет использовать системную аутентификацию, когда LDAP включен как основной способ аутентификации.

  • Страница /login использует метод аутентификации, установленный как primary в настройках, который, скорее всего, будет LDAP, так как вы читаете эту страницу,
  • Страница /login/system всегда использует системную аутентификацию.

Чтобы войти как администратор экземпляра, перейдите на http(s)://allure-url/login/system и используйте учетные данные локального пользователя.

Устранение неполадок

Если вы получаете ошибку "Request failed with status code 401" при попытке входа с использованием LDAP, проверьте следующее:

  1. Убедитесь, что URL LDAP, указанный в файле конфигурации, правильный.
  2. Убедитесь, что вы используете действительный SSL-сертификат.
  3. Проверьте, что учетные данные, указанные в файле конфигурации (такие как LDAP_LOGIN_SA и LDAP_LOGIN_SA_PASS), правильные и не содержат пробела в конце.