Django默认管理中的LDAP

2024-06-17 13:19:37 发布

您现在位置:Python中文网/ 问答频道 /正文

已更新

如何在LDAP服务器上而不是在默认数据库上进行默认管理员身份验证?我找到了这个包Django Auth LDAP,但没有配置为供管理员登录使用。除了LDAP配置之外,我还尝试将下面的行放在settings.py中:

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

但它不起作用。如果删除最后一行,它不会在LDAP上进行身份验证,并显示默认的身份验证错误,因为ModelBackend是一个回退。我已尝试复制和修改documentation中列出的配置,但在控制台上出现此错误:

Caught LDAPError while authenticating karlisson: INVALID_DN_SYNTAX({'info': 'invalid DN', 'desc': 'Invalid DN syntax'},)

我的设置.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初学者。


Tags: djangopyauth身份验证bindexample管理员错误
2条回答

管理员登录的工作方式应与正常登录相同。仅仅添加后端是不够的,您需要对其进行配置。医生们说了很多:

您可能需要设置:

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所做的日志,查看它是否接收到来自应用程序的请求)。

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

相关问题 更多 >