【问题标题】:LDAP in Django default adminDjango 默认管理员中的 LDAP
【发布时间】:2012-01-04 13:13:18
【问题描述】:

更新

如何在 LDAP 服务器而不是默认数据库上进行 Django 默认管理员身份验证?我找到了包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 初学者。

【问题讨论】:

    标签: python django ldap django-auth-ldap


    【解决方案1】:

    管理员登录应该与正常登录相同。仅仅添加后端是不够的,你需要配置它。文档实际上说了很多:

    你可能需要设置这个:

    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 生成的日志,以查看它是否收到来自您的应用的请求)。

    【讨论】:

      【解决方案2】:

      bindDN 必须是专有名称。 example_nt 不是专有名称。

      【讨论】:

        猜你喜欢
        • 2011-03-05
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 2012-02-13
        • 1970-01-01
        • 2012-04-21
        相关资源
        最近更新 更多