Django 1.5 和 Python 3 中的 LDAP

0 投票
2 回答
2654 浏览
提问于 2025-04-17 23:15

我正在使用Django 1.5和Python 3,对Django和LDAP都不太熟悉。

我在我的settings.py文件中加入了以下配置(根据我的情况进行了修改),这个配置是从这里找到的:

AUTH_LDAP_SERVER_URI = "ldap://example.fr"

AUTH_LDAP_BIND_DN = 'cn=a_user,dc=example,dc=fr'
AUTH_LDAP_BIND_PASSWORD=''
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=users,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(uid=%(user)s)')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('ou=groups,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(objectClass=groupOfNames)')

AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()

#Populate the Django user from the LDAP directory
AUTH_LDAP_USER_ATTR_MAP = {
    'first_name': 'sAMAccountName',
    'last_name': 'displayName',
    'email': 'mail'
}


AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

不过,我也看过这里的讨论,里面提到django-auth-ldap模块还没有移植到Python 3上。

我有几个问题:

  1. 为了让上面的配置正常工作,settings.py文件中需要导入哪些模块?

  2. 这些导入中哪些是Python 3不支持的?

  3. 在Django中使用Python 3实现基于LDAP的认证是否可行?是对上面方法的某种修改,还是需要其他的方法?

任何建议都很感谢。

2 个回答

4

虽然我来得有点晚,但现在可能有一个更好的选择适合Python 3。我开始使用这个Django应用来满足我的需求:

https://github.com/etianen/django-python3-ldap

这个应用在Python 3和ldap3这个包上运行得非常好。我目前只测试过OpenLDAP。

2

看起来你通过链接的讨论找到了答案,但我还是把它放在这里,以帮助任何遇到这个问题的人。

python-ldap 目前还不支持 Python3,不过有一个分支是支持的:

pip install git+https://github.com/rbarrois/python-ldap.git@py3

看起来这些改动已经被主项目接受了,但按照 django-auth-ldap 的说明来安装这个分支要简单一些,而不是去搞清楚 pypi 上哪个版本包含了这些改动。

你还需要安装 django-auth-ldap:

pip install django-auth-ldap

到这一步,你的大部分代码应该只需要两个导入就能正常工作:

import ldap
from django_auth_ldap.config import LDAPSearch

你可能还需要从某个地方导入 ActiveDirectoryGroupType,但我自己从来没有用过这个。

根据讨论,python-ldap 是一个老旧且不太稳定的代码库。我对 python3-ldap 非常满意,希望将来 django-auth-ldap 能够转向使用这个模块。

http://pythonhosted.org/python3-ldap/

撰写回答