我在使用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知之甚少,我今天早上安装了它,所以我的问题可能听起来很幼稚。我只需要一个集中的用户群,我就可以在多个服务器之间进行更新和共享。
非常感谢你的帮助。
答案 0 :(得分:7)
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服务进行身份验证。要从Django应用程序操作LDAP目录的内容,您可能需要查看django-ldapdb。