Есть у меня сервер с контроллером домена и сервер с джанго. Хочу реализовать авторизацию через контроллер домена. Суть в чем: на боевом линукс сервере Django проект с ldap корректно выполняет авторизацию и создает пользователя в базе Джанго если его нет, но на боевом сервере работать не круто (1), неудобно (2).
Решил запустить проект у себя в PyCharm на винде, поставил все зависимости, все хотелки и ругалки в итоге запустил, но вот авторизация по LDAP не работает
Caught LDAPError while authenticating aleksandr.semenchuk@my.group: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []})
и хоть убей. При этом в соседнем test.py запускаю поиск и авторизация выполняется и даже поиск по домену работает.
import ldap
server = "ldap://192.168.101.37" # Сервер LDAP
bind_dn = "aleksandr.semenchuk@my.group" # Учетная запись для аутентификации
password = "MyPass" # Пароль для аутентификации
# Параметры поиска
base_dn = "OU=RAZUMUsers,DC=razum,DC=group" # Базовый DN, откуда начнется поиск
search_filter = "(sAMAccountName=aleksandr.semenchuk)" # Фильтр для поиска пользователя
search_scope = ldap.SCOPE_SUBTREE # Уровень поиска: везде под base_dn
retrieve_attributes = ["cn", "mail", "title", "department"] # Атрибуты, которые нужно извлечь
try:
# Подключение к серверу
conn = ldap.initialize(server)
conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3) # Используем версию протокола LDAP 3
conn.simple_bind_s(bind_dn, password) # Выполнение аутентификации
print("LDAP connection successful! Performing search...")
# Выполнение поиска
result = conn.search_s(base_dn, search_scope, search_filter, retrieve_attributes)
# Обработка результатов поиска
for dn, entry in result:
print(f"DN: {dn}")
for attr, values in entry.items():
print(f"{attr}: {values}")
conn.unbind_s() # Закрытие подключения
except ldap.LDAPError as e:
print(f"LDAP connection or search failed: {e}")
Так же прилагаю
settings.py из джанго
# Основные настройки LDAP
AUTH_LDAP_SERVER_URI = "ldap://192.168.101.37"
# AUTH_LDAP_START_TLS = True
# Опционально добавь резервный контроллер домена
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_PROTOCOL_VERSION: 3,
ldap.OPT_REFERRALS: 0,
ldap.OPT_NETWORK_TIMEOUT: 10,
ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_NEVER, # Отключает проверку сертификатов
}
# Настройки поиска пользователей
AUTH_LDAP_BIND_DN = "aleksandr.semenchuk@my.group" # Данные пользователя для соединения с AD
AUTH_LDAP_BIND_PASSWORD = "MyPass"
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"OU=RAZUMUsers,DC=razum,DC=group",
ldap.SCOPE_SUBTREE,
"(userPrincipalName=%(user)s)"
)
# Опционально: установка базовых атрибутов пользователя
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": decode_if_bytes("givenName"),
"last_name": decode_if_bytes("sn"),
"email": decode_if_bytes("mail"),
"organization": decode_if_bytes("company"), # Поле для организации
"position": decode_if_bytes("title"), # Поле для должности
}
# Настройка синхронизации групп из AD
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
"OU=RAZUMUsers,DC=razum,DC=group",
ldap.SCOPE_SUBTREE,
"(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
# Включаем автоматическое создание пользователей в Django
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_MIRROR_GROUPS = True
# Использование LDAP для аутентификации
AUTHENTICATION_BACKENDS = [
'django_auth_ldap.backend.LDAPBackend', # LDAP бэкенд
'django.contrib.auth.backends.ModelBackend', # Бэкенд Django по умолчанию
]
# Логирование LDAP
import logging
logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
Как заставить эту скотину работать так же четко как на linux? Все пакеты проверил по версиям, все идентичны.