Active directory 如何转义LDAP dn进行查找?

Active directory 如何转义LDAP dn进行查找?,active-directory,ldap,spring-ldap,Active Directory,Ldap,Spring Ldap,我有一个小脚本(spring/groovy/ldap),可以在Active Directory中找到一个人下面的“管理树” i、 e.从“root person”中,脚本查找root person的直接下属,然后使用递归:对于每个直接下属,查找其直接下属,等等 directReports用户属性以以下形式指定DN的列表: CN=Simpson\, Homer,OU=OU_0731DevOps,OU=OU_0100Monitor Services,OU=OU_0001U*Nuclear Energ

我有一个小脚本(spring/groovy/ldap),可以在Active Directory中找到一个人下面的“管理树”

i、 e.从“root person”中,脚本查找root person的直接下属,然后使用递归:对于每个直接下属,查找其直接下属,等等

directReports用户属性以以下形式指定DN的列表:

CN=Simpson\, Homer,OU=OU_0731DevOps,OU=OU_0100Monitor Services,OU=OU_0001U*Nuclear Energy Corporation,OU=OU_UNuclearUsers,DC=corp,DC=unucleargrp,DC=com
该脚本按DN为每个直接报告执行“ldap查找”,例如:

obj = ldapTemplate.lookup(pDn, new UserAttributesMapper())
问题

ldap查找引发InvalidNameException

[LDAP:错误代码34-0000208F:LDAPPER:DSID-0C090787

我尝试了各种转义组合,但仍然出现错误

我错过了什么

更多信息

此url/5312.active-directory-characters-to-escape.aspx显示要转义的字符:

Active Directory要求对以下十个字符进行转义 使用反斜杠“\”转义字符,如果它们出现在 可分辨名称的各个组成部分:

逗号,
反斜杠字符\
磅符号(散列符号)#
加号+
小于符号<
大于符号>
分号;
双引号(引号)”
等号=
前导或尾随空格
工具

  • 棒极了
  • 弹簧靴
  • 虚拟机

谢谢!

我用LDAPNameBuilder找到了答案

TLDR:

ldapTemplate.lookup需要剥离DN的“DC..”部分。*

如果您知道更干净/更正式的解决方案,请发布

LDAP查找失败,DN如下:

此DN具有“DC=…”组件,使用spring ldap查找失败

CN=Simpson\, Homer,OU=OU_0731DevOps,OU=OU_0100Monitor Services,OU=OU_0001U*Nuclear Energy Corporation,OU=OU_UNuclearUsers,DC=corp,DC=unucleargrp,DC=com
LDAP成功完成此操作(无“DC”组件):

此DN没有“DC=”组件。Spring LDAP模板提供basedn。 CN=Simpson\,荷马,OU=OU_0731DevOps,OU=OU_0100监控服务,OU=OU_0001;*核能公司

上下文提醒

此应用程序遍历“管理树”。它通过“directReports”属性(列出每个直接报告的完整DN)获取人员管理。此应用程序希望通过其DN查找该用户

调整/示例

此调整使ldap查找工作正常:

User lookupUserByDn(String pDn) {
    // needed this to get it to work
    String dn=pDn.replace(",${ldapConfig.base}","")
    ldapTemplate.lookup(dn, new UserAttributesMapper())
}
作为记录,我的application.yml ldap部分如下所示:

spring:
    ldap:
      urls: ldap://dc.corp.unucleargrp.com:389
      base: DC=corp,DC=unucleargrp,DC=com
      username: username_val
      password : password_val
据此,


删除基本属性后,所有来回的操作都将使用完整的DNs。

这可能是配置文件中的问题,例如?
spring:
    ldap:
      urls: ldap://dc.corp.unucleargrp.com:389
      base: DC=corp,DC=unucleargrp,DC=com
      username: username_val
      password : password_val