2012-01-04 63 views
4

修订LDAP在Django默认的admin

它是如何可能的Django的默认管理LDAP服务器,而不是默认的数据库上进行身份验证?我找到了包Django Auth LDAP但没有任何关于配置它被管理员登录使用。我试过在LDAP配置之外的settings.py中放置下面的行:

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

但它不起作用。如果我删除最后一行,它不会在LDAP上进行身份验证,并显示默认身份验证错误,因为ModelBackend是后备。我试图复制和修改在documentation列出的CONFIGS和我得到的控制台此错误:

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初学者。

回答

8

管理员登录应该像正常登录一样工作。只需添加后端是不够的,您需要对其进行配置。该文件说其实很多:

你可能需要设置:

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制作的日志,看是否收到来自您的应用的请求)。

0

bindDN必须是可分辨的名称。 example_nt不是一个可分辨的名称。