Настройки LDAP

Настройка LDAP аутентификации для Active Directory

Этот документ описывает параметры конфигурации для подключения к Active Directory через LDAP.

Пример конфигурации

ldap:
  enabled: true
  auth_ldap_server_uri: "ldaps://host.customer.loc"
  auth_ldap_bind_dn: "CN=Searcher LDAP,OU=ServiceUsers,OU=Customer,DC=customer,DC=loc"
  auth_ldap_bind_password: "your_password_here"
  auth_ldap_user_search_base: "dc=customer,dc=loc"
  auth_ldap_user_search_filter: "(sAMAccountName=%(user)s)"
  auth_ldap_group_search_base: "DC=customer,DC=loc"
  auth_ldap_group_search_filter: "(objectClass=group)"
  auth_ldap_attr_firstname: "cn"
  auth_ldap_attr_lastname: "sn"
  auth_ldap_attr_email: "mail"
  groups:
    admin:
      dn: "cn=admin,ou=groups,dc=example,dc=com"
      is_superuser: true
      is_staff: true
    operator:
      dn: "cn=admin,ou=groups,dc=example,dc=com"
      is_superuser: false
      is_staff: true
    user:
      dn: "cn=admin,ou=groups,dc=example,dc=com"
      is_superuser: false
      is_staff: false
    it_g:
      dn: "cn=it_g,ou=it,ou=customer,dc=customer,dc=loc"
      is_superuser: true
      is_staff: true

Обязательные параметры

ldap.enabled

  • Тип: boolean
  • По умолчанию: false
  • Описание: Включает/выключает LDAP аутентификацию
  • Пример: true

auth_ldap_server_uri

  • Тип: string
  • Формат: ldap://хост или ldaps://хост
  • Описание: URI LDAP сервера Active Directory
  • Примеры:
    • ldap://host.customer.loc (незащищенное соединение)
    • ldaps://host.customer.loc (защищенное соединение TLS)
    • ldap://192.168.1.10 (по IP адресу)

⚠️ Важно: При использовании ldaps:// убедитесь, что сертификат CA добавлен в доверенные корневые центры сертификации.

auth_ldap_bind_dn

  • Тип: string
  • Формат: Distinguished Name (DN) сервисной учетной записи
  • Описание: Учетная запись для подключения к AD и поиска пользователей
  • Примеры:
    • CN=Searcher LDAP,OU=ServiceUsers,OU=Customer,DC=customer,DC=loc
    • ldapsearcher@customer.loc (UPN формат)
    • customer\ldapsearcher (DOMAIN\username формат)

auth_ldap_bind_password

  • Тип: string
  • Описание: Пароль сервисной учетной записи

Параметры поиска пользователей

auth_ldap_user_search_base

  • Тип: string
  • Описание: Базовый DN для поиска пользователей
  • Рекомендация: Для AD обычно используется корень домена
  • Пример: dc=customer,dc=loc

auth_ldap_user_search_filter

  • Тип: string
  • Описание: Фильтр для поиска пользователей
  • Для Active Directory: (sAMAccountName=%(user)s)
  • Шаблон: %s заменяется на имя пользователя, введенное при входе

Примечание: В Active Directory используется sAMAccountName, а не uid


Параметры поиска групп

auth_ldap_group_search_base

  • Тип: string
  • Описание: Базовый DN для поиска групп
  • Пример: DC=customer,DC=loc (по всему домену)

auth_ldap_group_search_filter

  • Тип: string
  • Описание: Фильтр для поиска групп
  • Для Active Directory: (objectClass=group)

Маппинг атрибутов

auth_ldap_attr_firstname

  • Тип: string
  • Описание: Атрибут LDAP, содержащий имя пользователя
  • Для AD: cn, givenName
  • Пример: cn

auth_ldap_attr_lastname

  • Тип: string
  • Описание: Атрибут LDAP, содержащий фамилию пользователя
  • Для AD: sn, surname
  • Пример: sn

auth_ldap_attr_email

  • Тип: string
  • Описание: Атрибут LDAP, содержащий email
  • Для AD: mail, userPrincipalName
  • Пример: mail

Настройки групп

Структура групп

groups:
  <имя_группы_в_приложении>:
    dn: "DN_группы_в_AD"
    is_superuser: boolean
    is_staff: boolean

Примеры групп

groups:
  # Группа администраторов
  admin:
    dn: "CN=Domain Admins,CN=Users,DC=customer,DC=loc"
    is_superuser: true
    is_staff: true

  # Группа операторов
  operator:
    dn: "CN=Operators,OU=Groups,DC=customer,DC=loc"
    is_superuser: false
    is_staff: true

  # Группа обычных пользователей
  user:
    dn: "CN=Domain Users,CN=Users,DC=customer,DC=loc"
    is_superuser: false
    is_staff: false

  # IT группа
  it_g:
    dn: "CN=IT_Group,OU=IT,OU=Customer,DC=customer,DC=loc"
    is_superuser: true
    is_staff: true

Параметры группы

Параметр Тип Описание
dn string Distinguished Name группы в Active Directory
is_superuser boolean Дает права суперпользователя Django
is_staff boolean Разрешает доступ в административную панель Django

Проверка подключения

Команда для тестирования LDAP:

# Проверка аутентификации
ldapsearch -x -H ldap://host.customer.loc \
  -D "CN=Searcher LDAP,OU=ServiceUsers,OU=Customer,DC=customer,DC=loc" \
  -W \
  -b "dc=customer,dc=loc" \
  "(sAMAccountName=administrator)"

# Поиск всех групп
ldapsearch -x -H ldap://host.customer.loc \
  -D "CN=Searcher LDAP,OU=ServiceUsers,OU=Customer,DC=customer,DC=loc" \
  -W \
  -b "dc=customer,dc=loc" \
  "(objectClass=group)" cn

Решение частых проблем

1. Ошибка “Invalid credentials”

Причина: Неправильный DN или пароль Решение:

  • Проверьте правильность auth_ldap_bind_dn
  • Проверьте пароль в auth_ldap_bind_password
  • Попробуйте UPN формат: username@domain.loc

2. Ошибка “Can’t contact LDAP server”

Причина: Проблемы с сетью или сертификатами Решение:

  • Проверьте доступность сервера: ping host.customer.loc
  • Для ldaps:// добавьте сертификат CA в доверенные
  • Используйте ldap:// для тестирования

Готовые примеры конфигураций

Для Active Directory:

ldap:
  enabled: true
  auth_ldap_server_uri: "ldap://dc.example.com"
  auth_ldap_bind_dn: "service_account@example.com"
  auth_ldap_bind_password: "secure_password"
  auth_ldap_user_search_base: "dc=example,dc=com"
  auth_ldap_user_search_filter: "(sAMAccountName=%(user)s)"
  auth_ldap_group_search_base: "dc=example,dc=com"
  auth_ldap_group_search_filter: "(objectClass=group)"

Для OpenLDAP:

ldap:
  enabled: true
  auth_ldap_server_uri: "ldap://openldap.example.com"
  auth_ldap_bind_dn: "cn=admin,dc=example,dc=com"
  auth_ldap_bind_password: "admin_password"
  auth_ldap_user_search_base: "ou=users,dc=example,dc=com"
  auth_ldap_user_search_filter: "(uid=%(user)s)"
  auth_ldap_group_search_base: "ou=groups,dc=example,dc=com"
  auth_ldap_group_search_filter: "(objectClass=groupOfNames)"