为了账号安全,请及时绑定邮箱和手机立即绑定

是否有可能以及如何使用 python 和 django 从 LDAP 获取所有用户?

是否有可能以及如何使用 python 和 django 从 LDAP 获取所有用户?

胡说叔叔 2022-06-07 16:38:39
环境:python - 3.6.6django - 2.x.xdjango-auth-ldap - 2.0.0         python-ldap - 3.2.0代码:import ldapfrom django_auth_ldap.backend import LDAPBackend, _LDAPUser, LDAPSearchuser = _LDAPUser(LDAPBackend(), "any")  # just for getting root connection to LDAPsearch = LDAPSearch(    "ou=Some,dc=some,dc=some,dc=some",    ldap.SCOPE_SUBTREE,    "???? what should be here ???"  # criteria, I guess)# list of users is expected, or at least user's namesresult = search.execute(user.connection)  问题:如何为获取用户列表构建正确的标准(或如何正确调用它)?(链接会很棒)有可能吗?解决方案(不用于生产,只是工作草图):# based on https://medium.com/@alpolishchuk/pagination-of-ldap-search-results-with-python-ldap-845de60b90d2import ldapfrom ldap.controls import SimplePagedResultsControlfrom django_auth_ldap.backend import LDAPBackend, _LDAPUseruser = _LDAPUser(LDAPBackend(), "any")connect = user.connectionpage_control = SimplePagedResultsControl(True, size=2, cookie='')result = []fuse = 2while True:    fuse -= 1    if fuse < 0:        break    response = connect.search_ext(        "ou=some,dc=some,dc=some,dc=some",        ldap.SCOPE_SUBTREE,        "(objectClass=inetorgperson)",        [],        serverctrls=[page_control]    )    rtype, rdata, rmsgid, serverctrls = connect.result3(response)    result.extend(rdata)    controls = [control for control in serverctrls                if control.controlType == SimplePagedResultsControl.controlType]    if not controls:        print("The server ignores RFC 2696 control")        break    if not controls[0].cookie:        break    page_control.cookie = controls[0].cookie
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您的环境中可能涉及许多不同的场景。

至于过滤器,有一些Microsoft Active Directory的示例

对于(不是广告)一些简单的事情,比如

(objectClass=inetorgperson)

应该足够了。


查看完整回答
反对 回复 2022-06-07
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信