Настройки 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=locldapsearcher@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)"