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

Spring Security LDAP对接企业AD报bind must be completed on the connection如何解决

问题根因

你遇到的LDAP报错是因为公司Active Directory(AD)默认禁止匿名查询操作,必须先使用有权限的账号完成服务端绑定(bind),才能执行后续的用户查询、认证等操作。你现有配置未配置绑定逻辑,且部分参数不符合AD的对接规则。

配置调整方案

修改后的认证配置如下,完全对齐你提供的PHP可运行逻辑:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
      .ldapAuthentication()
        // 替换为实际的用户搜索规则,对应PHP中拼接用户名@域的逻辑
        .userSearchFilter("(userPrincipalName={0}@aa.company.com)")
        .userSearchBase("ou=users")
        .groupSearchBase("ou=users")
        .contextSource()
          .url("ldap://companyhost:389/dc=aa,dc=company,dc=com")
          // 配置AD服务绑定账号,替换为实际有查询权限的服务账号UPN/DN
          .managerDn("your-service-account@aa.company.com")
          // 配置绑定账号的密码
          .managerPassword("your-service-account-password")
          // 对应PHP中的LDAP参数配置
          .baseEnvironmentProperties(Map.of(
            "java.naming.ldap.version", "3",
            "java.naming.referral", "ignore"
          ));
    // 移除原有的passwordCompare配置:AD不允许直接读取用户密码属性,改为直接bind验证,和PHP逻辑一致
}
改动说明
  • 新增managerDn、managerPassword配置:用于LDAP连接初始化时完成服务端绑定,获得用户查询权限,解决报错提示的「需先完成bind」问题
  • 替换userDnPatterns为userSearchFilter:AD用户通常分散在多个OU下,通过userPrincipalName直接检索用户更灵活,和PHP中拼接用户名@域的逻辑对齐
  • 移除passwordCompare相关配置:改为Spring Security LDAP默认的bind认证模式,直接使用用户输入的账号密码向AD发起绑定请求,绑定成功即认证通过,符合AD的标准认证逻辑
  • 新增LDAP基础参数配置:匹配PHP代码中的协议版本、关闭referrals的配置,避免AD连接兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:27:02