You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用django-auth-ldap在Django中获取LDAP服务器的全部用户

解决方法

首先明确核心原因:LDAPBackend.populate_user() 方法仅支持传入单个明确的用户名,从LDAP拉取对应用户并同步到Django本地用户表,不支持通配符批量查询,因此你传入*返回None属于预期行为。

你可以直接复用已经初始化完成的LDAP连接执行查询,匹配你提到的ldap3查询效果的实现代码如下:

import ldap
from django_auth_ldap.backend import LDAPBackend, backend
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import userSerializer

@api_view(['GET'])
def users(request):
    # 初始化LDAP连接并绑定
    l = ldap.initialize(backend.AUTH_LDAP_SERVER_URI)
    try:
        l.simple_bind_s(backend.AUTH_LDAP_BIND_DN, backend.AUTH_LDAP_BIND_PASSWORD)
        # 执行LDAP查询,对应你提到的ldap3查询逻辑
        # 参数说明:查询根DN、查询范围、过滤条件、返回属性列表
        ldap_users = l.search_s(
            'ou=users,dc=example,dc=com',  # 可替换为settings.AUTH_LDAP_USER_SEARCH.base_dn复用已有配置
            ldap.SCOPE_SUBTREE,
            '(objectclass=person)',
            ['uid', 'cn', 'givenName', 'sn', 'gidNumber']
        )
        # 处理返回结果:python-ldap返回格式为 (用户DN, {属性名: [属性值字节数组]}) 的元组列表
        processed_users = []
        ldap_backend = LDAPBackend()
        for dn, attrs in ldap_users:
            # 可选:如果需要同步用户到Django本地auth_user表,调用populate_user即可
            if 'uid' in attrs:
                username = attrs['uid'][0].decode('utf-8')
                user = ldap_backend.populate_user(username)
                if user:
                    processed_users.append(user)
            # 无需同步到本地的场景,直接构造字典给序列化器即可
            # processed_user = {k: v[0].decode('utf-8') for k, v in attrs.items() if v}
            # processed_users.append(processed_user)
    finally:
        # 保证连接正常释放
        l.unbind_s()
    serializer = userSerializer(processed_users, many=True)
    return Response(serializer.data)

关键说明

  • python-ldap的search_s是同步查询方法,参数顺序和ldap3的search略有差异,返回的属性值默认是bytes类型,需要手动解码为字符串
  • 如果你已经在settings中配置过AUTH_LDAP_USER_SEARCH,可以直接复用配置里的根DN和过滤条件,不需要硬编码相关参数
  • 不需要把LDAP用户同步到Django本地的auth_user表的场景,直接处理返回的attrs字典即可,不需要调用populate_user

内容的提问来源于stack exchange,提问作者user10695308

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:36:07