Django 默认管理中的 LDAP
更新
我想知道如何让Django的默认管理后台通过LDAP服务器进行身份验证,而不是使用默认的数据库。我找到了一款叫Django Auth LDAP的工具,但没有找到关于如何让它在管理员登录时使用的配置方法。我在settings.py文件里加了下面的几行,除了LDAP的配置:
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
但是这样不管用。如果我把最后一行去掉,它就不能通过LDAP进行身份验证,而是显示默认的认证错误,因为ModelBackend是一个备用选项。我尝试复制并修改文档中列出的配置,但在控制台上出现了这个错误:
Caught LDAPError while authenticating karlisson: INVALID_DN_SYNTAX({'info': 'invalid DN', 'desc': 'Invalid DN syntax'},)
我的settings.py文件:
AUTH_LDAP_SERVER_URI = "ldap://192.168.0.2"
AUTH_LDAP_BIND_DN = "example_nt"
AUTH_LDAP_BIND_PASSWORD = "example"
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=admin,dc=example_nt,dc=com,dc=br",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
我不知道语法错误在哪里,我对LDAP还是个新手。
2 个回答
1
bindDN 必须是一个唯一的名称。example_nt
不是一个唯一的名称。
12
管理员登录应该和普通登录一样好用。单单加上后端是不够的,你还需要进行一些配置。文档里其实说了很多:
你可能需要设置这个:
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=active,ou=groups,dc=example,dc=com",
"is_staff": "cn=staff,ou=groups,dc=example,dc=com",
"is_superuser": "cn=superuser,ou=groups,dc=example,dc=com"
}
这些标志是管理员用的,至少有一个是 is_superuser
。
但最重要的是 settings.py
里的这些内容:
AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com"
import ldap
from django_auth_ldap.config import LDAPSearch
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=example,dc=com",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
请尝试配置这些内容以连接到你的ldap,如果你仍然遇到问题,我们可以从那里开始排查。
还可以尝试获取一些 调试 信息,这样你就能知道请求是否成功发送到你的ldap(也许你还可以查看ldap的日志,看看它是否收到了来自你应用的请求)。