Spring Boot连接MS Active Directory出现LDAP错误码32如何解决
错误原因
- LDAP错误码32对应
NO_OBJECT错误,含义是程序尝试访问的LDAP对象/路径不存在。本次报错中remaining name '/'说明程序从LDAP根路径开始搜索时无法定位到目标用户路径,核心由配置错误导致:userDnPatterns参数用法错误:该参数用于定义用户DN的匹配模板,必须包含用户名占位符{0},你当前配置的是固定DN值cn=users,dc=in,dc=com,不符合参数设计要求。如果要指定用户搜索的根路径,应该使用userSearchBase参数。userSearchFilter参数配置错误:当前配置的(objectClass=person)只能匹配所有person类型的对象,没有关联登录用户名的占位符{0},无法定位到单个登录用户。微软Active Directory默认使用sAMAccountName存储用户登录名,你注释掉的过滤规则才是适配AD的正确写法。
- 附加排查点:可通过ADSI编辑工具验证
cn=users,dc=in,dc=com是否为域内存储用户的真实有效DN,同时确认managerDn配置的管理员账号路径、密码正确。
修复方案
配置示例(适配AD常规场景)
auth .ldapAuthentication() // 指定用户搜索的根DN .userSearchBase("cn=users,dc=in,dc=com") // 用sAMAccountName匹配输入的登录用户名,{0}会自动替换为用户输入的账号 .userSearchFilter("(sAMAccountName={0})") .contextSource() .url("ldap://ldap1:389") .managerDn("cn=Admin,ou=SERVICEACCT,dc=in,dc=com") .managerPassword("1234");
如果你的所有AD用户都放在同一个固定OU下,也可以直接用userDnPatterns写法,不需要额外配置userSearchBase,示例如下:
// 假设所有用户都存放在ou=people,dc=in,dc=com下 auth .ldapAuthentication() .userDnPatterns("cn={0},ou=people,dc=in,dc=com") .userSearchFilter("(objectClass=person)") .contextSource() .url("ldap://ldap1:389") .managerDn("cn=Admin,ou=SERVICEACCT,dc=in,dc=com") .managerPassword("1234");
内容的提问来源于stack exchange,提问作者sjayendra
相关产品推荐
相关产品推荐

