9

我在使用 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 了解不多,我今天早上才安装它,所以我的问题可能听起来很幼稚。我只需要一个能够在多个服务器之间更新和共享的集中式用户群。

非常感谢您的帮助。

4

1 回答 1

9

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

于 2011-06-25T19:34:14.187 回答