使用Django在LDAP中创建用户

时间:2011-06-19 10:12:59

标签: django authentication ldap backend django-auth-ldap

我在使用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 个答案:

答案 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