【问题标题】:how to specify search_filter='(objectClass=group)',search_scope='SUBTREE',attributes = ['member']) for django python3 ldap如何为 django python3 ldap 指定 search_filter='(objectClass=group)',search_scope='SUBTREE',attributes = ['member'])
【发布时间】:2022-01-07 16:41:17
【问题描述】:

我正在使用 django python3 ldap 包将一些用户从 ldap 服务器同步到我的 django 应用程序。 它使用我在设置中定义的配置连接到 ldap 服务器,但用户查找失败。 我使用的搜索库是

LDAP_AUTH_SEARCH_BASE = "CN=SOME_USERS,OU=Security Group,OU=Example,DC=Example,DC=com"

但我得到了一个名为 ldap3 的不同包的结果。

对于 ldap3,我可以指定一些额外的参数以及如下所示的 search_base

from ldap3 import Server, Connection, SAFE_SYNC
server = Server('my_server')
conn = Connection(server, 'my_user', 'my_password', client_strategy=SAFE_SYNC, 
auto_bind=True)
conn.search(search_base='CN=DTS_USERS,OU=Security 
Group,OU=Viacom18,DC=viacom18,DC=com',search_filter='(objectClass=group)'
        ,attributes = ['member'])

我只想知道如何指定“search_filter='(objectClass=group)' ,attributes = ['member']" 与 django python3 ldap。我检查了https://github.com/etianen/django-python3-ldap 的文档,但找不到任何有用的东西。

这是我的所有设置

    LDAP_AUTH_URL = "ldaps://example.com:636"

LDAP_AUTH_USE_TLS = True

LDAP_AUTH_SEARCH_BASE = "CN=SOME_USERS,OU=Security Group,OU=Example,DC=Example,DC=com"

LDAP_AUTH_USER_FIELDS = {
    "username": "sAMAccountName",
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail",
}

LDAP_AUTH_OBJECT_CLASS = "group"
LDAP_AUTH_USER_LOOKUP_FIELDS = ("username",)
LDAP_AUTH_CLEAN_USER_DATA = "django_python3_ldap.utils.clean_user_data"
LDAP_AUTH_SYNC_USER_RELATIONS = "django_python3_ldap.utils.sync_user_relations"
LDAP_AUTH_FORMAT_SEARCH_FILTERS = "utils.ftp.custom_format_search_filters"
LDAP_AUTH_FORMAT_USERNAME = "django_python3_ldap.utils.format_username_active_directory_principal"
LDAP_AUTH_ACTIVE_DIRECTORY_DOMAIN = "example.com"
LDAP_AUTH_CONNECTION_USERNAME = "my_user"
LDAP_AUTH_CONNECTION_PASSWORD = "password"
LDAP_AUTH_CONNECT_TIMEOUT = None
LDAP_AUTH_RECEIVE_TIMEOUT = None

AUTHENTICATION_BACKENDS = (
    'django_python3_ldap.auth.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',  # this is default
    'guardian.backends.ObjectPermissionBackend',  # guardian dependencies
)

我的功能是

def custom_format_search_filters(ldap_fields):
search_filters = format_search_filters(ldap_fields)
search_filters.append("(memberOf=CN=SOME_USERS,OU=Security Group,OU=Example,DC=Example,DC=com)")
return search_filters

我只想同步 SOME_USERS 组内的用户 任何帮助将不胜感激?

【问题讨论】:

    标签: python django ldap ldap-query


    【解决方案1】:

    这两个包用于不同的目的。 ldap3 包是一个通用 LDAP 库。 django-python3-ldap 包用于“使用 LDAP 服务器验证用户”。

    您的ldap3 代码看起来像是在寻找特定组的成员。如果您的目标是只允许该组的用户进行身份验证,那么文档确实会在 Custom User Filters 标题下触及这一点。请注意:

    # Advanced: apply custom LDAP filter logic.
    search_filters.append("(|(memberOf=groupA)(memberOf=GroupB))")
    

    这会将身份验证限制为仅groupAGroupB 中的用户。

    【讨论】:

    • 是的,我创建了相同的过滤器这个 search_filters.append("(|(memberOf=cn=DTS_USERS))") 我的组名是 DTS_USERS。但它不会同步该组中的用户,而只会打印连接成功。知道我在做什么错吗?谢谢你的回答。
    • 您需要使用完整的专有名称,并且由于您只有一个组,因此不需要 OR (|)。所以像这样:search_filters.append("(memberOf=CN=DTS_USERS,OU=Security Group,OU=Viacom18,DC=viacom18,DC=com)")
    • 嗨,加布里埃尔,感谢您的回答并尝试过。但它再次显示“LDAP 连接成功”但不同步用户。现在我已将我的设置配置添加到问题中,请您看一下。感谢您的努力。
    • 文档中有这行吗? from django_python3_ldap.utils import format_search_filters 另外,custom_format_search_filters 函数的主体是否缩进正确?或者这只是复制/粘贴错误?
    • 我可能帮不了多少。我知道 LDAP,但对 python 不太了解。
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2020-11-27
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2020-02-29
    • 2014-12-08
    相关资源
    最近更新 更多