LDAP错误代码32求助:Spring LDAP向AD添加用户失败
LDAP错误码32(NO_OBJECT)排查方案
错误原因分析
LDAP错误码32对应指定对象不存在,结合错误信息里的best match of: 'DC=xxxxxx,DC=int',说明代码尝试绑定的用户DN(区分名)路径无效,父节点不存在。
具体问题点
DN的域组件(DC)不一致
配置文件中base是DC=xxxxxx,DC=int,但代码中bind的DN写的是:ldapTemplate.bind("cn=" + user.getUsername() + ",ou=users,dc=xxxx,dc=int", context, null);这里的
dc=xxxx,dc=int比配置里的DC=xxxxxx,DC=int少了一个x,路径不匹配。OU节点可能不存在
即使修正了DC部分,ou=users这个组织单元(OU)是否在DC=xxxxxx,DC=int根域下存在?如果该OU未创建,AD会找不到对应的父容器,同样报NO_OBJECT错误。
解决步骤
- 修正DN的DC部分
把代码中的bind路径修改为和配置文件base一致的DC:ldapTemplate.bind("cn=" + user.getUsername() + ",ou=users,dc=xxxxxx,dc=int", context, null); - 确认OU存在性
通过AD管理工具(比如Active Directory用户和计算机)检查DC=xxxxxx,DC=int下是否存在ou=users:- 如果不存在,先创建该OU;
- 如果存在,注意OU名称的大小写(AD默认的用户容器是
OU=Users,首字母大写),确保代码中的名称和实际一致。
额外注意点
代码中设置unicodePwd的方式存在问题:
context.setAttributeValue("unicodePwd", "\"" + user.getPassword() + "\"");
AD要求unicodePwd必须是UTF-16LE编码的字节数组,且密码需符合AD的密码复杂度要求,否则后续会出现密码设置失败的问题。正确处理示例:
String quotedPassword = "\"" + user.getPassword() + "\""; context.setAttributeValue("unicodePwd", quotedPassword.getBytes(StandardCharsets.UTF_16LE));
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

