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

LDAP错误代码32求助:Spring LDAP向AD添加用户失败

LDAP错误码32(NO_OBJECT)排查方案

错误原因分析

LDAP错误码32对应指定对象不存在,结合错误信息里的best match of: 'DC=xxxxxx,DC=int',说明代码尝试绑定的用户DN(区分名)路径无效,父节点不存在。

具体问题点

  1. 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,路径不匹配。

  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:50:14