#17622·jumpserver

[Bug] LDAP对接连接超时时间配置不生效

Author: wan92henCreated Sep 24, 2026Updated Sep 24, 2026
Labels🐛 Bug🔔 Pending processing

产品版本

v4.10.19

版本类型

  • 社区版
  • 企业版
  • 企业试用版

安装方式

  • 在线安装 (一键命令安装)
  • 离线包安装
  • All-in-One
  • 1Panel
  • Kubernetes
  • 源码安装

环境信息

标准环境

缺陷描述

LDAP 认证配置中的连接超时时间不生效。AD/LDAP 接入 Rublon LDAP 代理后,用户登录需要在邮箱里批准 MFA 请求。JumpServer 大约 10 秒后就会中断认证、登录失败,用户来不及批准。

在 系统设置 → 认证 → LDAP(及 LDAP HA)→ Other → Connect timeout (s) 中把值从默认的 10 改成 60,保存后问题依旧,重启服务也无效。

复现步骤

  1. 配置 LDAP(或 LDAP HA)指向一个 bind 响应会延迟 > 10 秒的 LDAP 服务(例如挂人工审批的 MFA 代理)。
  2. 将“Connect timeout (s)”设置为 60 并保存。
  3. 用 LDAP 用户登录。
  4. 观察:登录仍在约 10 秒后失败(默认值),说明设置未生效。

期望结果

Connect timeout (s) 应控制 LDAP 连接/绑定的超时时间;设置为 60 后,认证应能等待 60 秒。

补充信息

真正传给 LDAP 客户端库的超时来自 AUTH_LDAP_CONNECTION_OPTIONS,它在 apps/jumpserver/settings/auth.py 中于模块导入时一次性构建为普通 dict:

python
AUTH_LDAP_CONNECTION_OPTIONS = {
    ldap.OPT_TIMEOUT: CONFIG.AUTH_LDAP_CONNECT_TIMEOUT,          # 默认 10
    ldap.OPT_NETWORK_TIMEOUT: CONFIG.AUTH_LDAP_CONNECT_TIMEOUT,
}
  • CONFIG 来自 jumpserver/conf.py(config.py / config.yml / 环境变量 / 默认值 AUTH_LDAP_CONNECT_TIMEOUT: 10,见 apps/jumpserver/conf.py),与数据库中的 Setting 无关。
  • 页面保存走的是 Setting.refresh_setting(),只执行 setattr(django.conf.settings, 'AUTH_LDAP_CONNECT_TIMEOUT', 60)(apps/settings/models.py),而 settings.AUTH_LDAP_CONNECTION_OPTIONS 这个 dict 不会被重算,settings.AUTH_LDAP_CONNECT_TIMEOUT 也没有任何代码读取。
  • 结果是 ldap.OPT_TIMEOUT / ldap.OPT_NETWORK_TIMEOUT 恒为 10,django-auth-ldap 的 _LDAPUser._bind_as() 使用同步 simple_bind_s(),10 秒后抛 ldap.TIMEOUT,被 apps/authentication/backends/ldap.py 的 except Exception 记录日志后返回 None,登录失败。
  • 另外,config_example.yml 也没有暴露该配置项(仅有 AUTH_LDAP_SEARCH_PAGED_SIZE、AUTH_LDAP_OPTIONS_OPT_REFERRALS),即该参数目前只在 UI 上出现、实际不起作用。

AUTH_LDAP_HA_CONNECT_TIMEOUT / AUTH_LDAP_HA_CONNECTION_OPTIONS 存在完全相同的问题。

尝试过的解决方案

No response