Django默认管理界面中的LDAP

4

更新

如何将Django默认管理员身份验证设置为LDAP服务器,而不是默认数据库?我已经找到了Django Auth LDAP软件包,但没有关于如何配置它用于管理员登录的信息。我尝试在settings.py文件中添加以下行,除了LDAP配置之外:

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

但是它不起作用。如果我删除最后一行,它就不能在LDAP上进行身份验证,并显示默认的auth错误,因为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个回答

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"
}

这些标志(flags)被我记得是由管理员使用的,至少有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生成的日志,以查看是否接收了来自应用程序的请求)。

1
绑定DN必须是一个可分辨名称,“example_nt”不是一个可分辨名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接