Создание пользователей в LDAP с использованием Django
У меня проблемы с модулем аутентификации LDAP django-auth-ldap. Я использую пример конфигурации с этого сайта: http://packages.python.org/django-auth-ldap/
Я хотел бы сделать две вещи:
1) Аутентификация по LDAP: На данный момент моя база данных LDAP пуста, я ничего к ней не добавил, фактически я не знаю, как это сделать. Тем не менее, я все еще могу войти в свой сайт на основе django со своими старыми логинами / паролями, хранящимися в моей базе данных django. Это почему? Не следует ли это игнорировать, не должен ли процесс входа в систему происходить с пользователями / паролями LDAP? Другими словами, если моя база данных LDAP пуста, не должен ли каждый мой логин терпеть неудачу? Однако это не так, у меня сложилось впечатление, что django полностью игнорирует модуль django-auth-ldap.
2) Синхронизировать LDAP с django (а не наоборот). Я не хочу использовать существующую базу данных пользователей для аутентификации. Я хочу иметь возможность создавать новых пользователей в Django и распространять этих пользователей на LDAP, чтобы они могли совместно использоваться другими службами, в моем случае, сервером openfire. Как вы делаете это с django-auth-ldap?
Вот копия / вставка моей конфигурации:
# Baseline configuration.
AUTH_LDAP_SERVER_URI = "127.0.0.1"
AUTH_LDAP_BIND_DN = "cn=admin,dc=nodomain"
AUTH_LDAP_BIND_PASSWORD = "admin"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=nodomain",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
# Set up the basic group parameters.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=django,ou=groups,dc=nodomain",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")
# Only users in this group can log in.
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=django,ou=groups,dc=nodomain"
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_PROFILE_ATTR_MAP = {
"employee_number": "employeeNumber"
}
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=active,ou=django,ou=groups,dc=nodomain",
"is_staff": "cn=staff,ou=django,ou=groups,dc=nodomain",
"is_superuser": "cn=superuser,ou=django,ou=groups,dc=nodomain"
}
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
# Keep ModelBackend around for per-user permissions and maybe a local
# superuser.
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
Извините, я мало что знаю о LDAP, я только что установил его сегодня утром, поэтому мой вопрос может показаться наивным. Мне просто нужна централизованная база пользователей, которую я мог бы обновлять и распределять между несколькими серверами.
Большое спасибо за вашу помощь.
1 ответ
1) В вашей конфигурации установлены два бэкэнда аутентификации:
AUTHENTICATION_BACKENDS = ( 'django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend', )
Django будет пытаться аутентифицироваться против каждого по очереди, пока не найдет тот, который добился успеха (или пока не закончится). Так как ваша директория LDAP пуста, она, вероятно, будет всегда терпеть неудачу, поэтому ModelBackend всегда получит шанс. Если вы не хотите аутентифицировать пользователей по базе данных пользователей Django, вы должны удалить ModelBackend из списка.
2) django-auth-ldap не распространяет пользователей Django до LDAP, только наоборот. Он разработан, чтобы позволить развертываниям Django проходить проверку подлинности на основе существующих служб LDAP, которые управляются отдельно. Чтобы манипулировать содержимым каталога LDAP из приложения Django, вы можете посмотреть на django-ldapdb.