已更新
如何在LDAP服务器而不是默认数据库上对Django默认管理员进行身份验证?我找到了包Django Auth LDAP,但没有关于将其配置为由admin登录使用的内容。我尝试将下面的行放在settings.py中除了LDAP配置之外:
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
但它不起作用。如果我删除最后一行,它不会在LDAP上进行身份验证并显示默认的auth错误,因为ModelBackend是一个后备。我已经尝试复制和修改documentation中列出的配置,我在控制台上收到此错误:
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初学者。
答案 0 :(得分:10)
管理员登录的工作方式与正常登录相同。仅仅添加后端是不够的,您需要配置它。文档实际上说了很多:
你可能需要设置:
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"
}
这些标志是管理员使用的IIRC,至少是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,如果您仍遇到问题,我们可以尝试从那里进行调试。
还尝试获取debugging信息,以便在发送对ldap的请求时获取信息(如果收到来自您应用的请求,您也可以查看由ldap发出的日志)。
答案 1 :(得分:0)
bindDN必须是专有名称。 example_nt
不是一个杰出的名字。