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

Python连接Active Directory授权阶段耗时过长问题排查

问题描述

我使用ldap库连接Active Directory,代码如下:

import logging
import ldap

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

logger = logging.getLogger('my_logger')

try:
    ldap_connect = ldap.initialize(host)
    ldap_connect.protocol_version = ldap.VERSION3
    ldap_connect.set_option(ldap.OPT_REFERRALS, 0)
    logger.info('successful connection')
    ldap_connect.unbind()
except Exception as e:
    logger.error(f'Error: {str(e)}')

try:
    ldap_connect.simple_bind_s(user, password)
    logger.info('successful bind LDAP')
except ldap.INVALID_CREDENTIALS as e:
    logger.warning('Error bind')
except Exception as e:
    logger.error(f'Error: {str(e)}')

连接初始化快速成功,但在授权阶段(simple_bind_s)出现卡顿,耗时约15分钟,而正常应该在1分钟内完成。

之后我尝试了ldap3库,代码如下:

import json
from ldap3 import Server, Connection, ALL, NTLM

class LDAPapi:
    def __init__(self, server: str, login: str, password :str , domain: str = "passport"):
        self.server = Server('server', get_info=ALL)
        self.conn = Connection(server, user=f'{domain}\\{login}', password=password, authentication=NTLM)

同样出现问题,执行Connection(...)代码行时耗时10-15分钟。

以下是trace_level=2的日志信息:

((17, 3), {})
=> result:
None
*** <ldap.ldapobject.SimpleLDAPObject object at 0x7> ldap://<host>- SimpleLDAPObject.set_option
((17, 3), {})
=> result:
None
*** <ldap.ldapobject.SimpleLDAPObject object at 0x7> ldap://<host>- SimpleLDAPObject.set_option
((8, 0), {})
=> result:
None
*** <ldap.ldapobject.SimpleLDAPObject object at 0x7> ldap://<host>- SimpleLDAPObject.simple_bind
((<login>, <password>, None, None), {})
=> result:
1
*** <ldap.ldapobject.SimpleLDAPObject object at 0x7> ldap://<host>- SimpleLDAPObject.result4
((1, 1, -1, 0, 0, 0), {})
=> result:
(97, [], 1, [])
<ldap.ldapobject.SimpleLDAPObject object at 0x7>
*** <ldap.ldapobject.SimpleLDAPObject object at 0x7> ldap://<host>- SimpleLDAPObject.unbind_ext
((None, None), {})
=> result:
None
可能的原因及排查方向
  • DNS解析异常:Active Directory依赖DNS定位域控制器,若客户端DNS配置错误、域控制器DNS记录失效,会导致绑定过程中长时间等待DNS响应。可尝试用域控制器IP替代域名连接,验证是否解决卡顿。
  • 网络链路/防火墙限制:客户端到域控制器的网络存在路由延迟,或防火墙对LDAP/NTLM流量做深层检查(如内容过滤、IDS/IPS规则),导致数据包处理缓慢。用ping测试连通性,telnet测试389(LDAP)、636(LDAPS)端口响应速度,同时确认防火墙未过度拦截LDAP流量。
  • 域控制器负载过高:目标域控制器CPU、内存或磁盘IO占用过高,无法及时处理绑定请求。联系AD管理员查看域控制器性能日志,确认是否存在资源瓶颈。
  • NTLM认证回退延迟:使用NTLM认证时,若Kerberos认证失败会回退到NTLM,若配置不当这个回退过程会触发超时延迟。可尝试强制使用Kerberos认证,或检查客户端Kerberos配置(如krb5.conf)是否正确。
  • LDAP超时配置缺失:当前代码未设置网络超时选项,可尝试添加:
    ldap_connect.set_option(ldap.OPT_NETWORK_TIMEOUT, 30)
    ldap_connect.set_option(ldap.OPT_TIMEOUT, 30)
    
    强制限制超时时间,观察是否触发超时错误,帮助定位问题根源。
  • 底层LDAP库兼容性问题:ldap或ldap3依赖的底层客户端库(如OpenLDAP)版本过旧,存在性能或兼容性bug。尝试更新相关库到最新稳定版本后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:45:18