【发布时间】:2020-12-01 19:32:43
【问题描述】:
实际的要求是我必须为我的组织的内部 Web 应用程序实现 LDAP 身份验证,该应用程序是在 Django 上构建的,但目前还不能这样做。
因此,我决定检查是否能够使用 python-ldap 模块建立连接。
我拥有的 ldap 服务器的详细信息:
server1 = dc3.something-software.com
server2 = dc5.something-software.com
还有python 代码:
def main(server="ldap://dc5.something-software.com", who='', cred=""):
try:
l = ldap.initialize(server)
l.simple_bind_s(who, cred)
if l:
print("Successfully connected")
l.search_s("cn=someone@something-software.com,dc=something-software,dc=com",
ldap.SCOPE_SUBTREE)
except Exception as e:
print(e)
return True
这给了我以下输出
Successfully connected
{'msgtype': 101, 'msgid': 2, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': '000004DC: LdapErr: DSID-0C0907C2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580'}
暗示我实际上能够连接到我的 ldap 但不能做任何其他事情?
我正在使用 Windows 操作系统,我已经尝试了其他类似问题的建议答案,尽管它们主要针对 *NIX 操作系统解决。
谢谢。
【问题讨论】:
-
您是否验证了连接性? LDAP 明文通常是 TCP 端口 389,SSL 通常是 TCP 端口 636。有一个 win32 构建的 nmap(例如 nmap -P0 -p389 something.dc5.example.com),或使用 telnet(例如 telnet something.dc5.example. com 389) 以验证您实际上能够到达那里。
-
它说既不是
telnet也不是nmap被识别/未安装 -
那么你需要安装其中一个。或者,如果您想走 python 路线,请使用 telnetlib 之类的东西。如果您无法在网络级别连接到主机,则从开发人员的角度来看,没有太多需要解决的问题。如果端口是开放的,那么深入了解应用程序为什么说它无法连接是一条可行的路径。
-
socket.gaierror: [Errno 11001] getaddrinfo failed是我收到的错误 -
主机名查找失败——您可以在 Windows (nslookup something.dc5.something-software.com) 上使用 nslookup 来验证该失败。如果您知道,可以尝试直接使用 IP。
标签: python-3.x ldap starttls python-ldap