基于LDAP Active Directory组搜索的基础不向下钻取以包括多个OU

时间:2019-03-12 18:18:02

标签: java spring-security ldap spring-ldap

我试图在我的Java应用程序中检索身份验证用户的所有AD组,其中,AD组来自两个不同的组织单位。到目前为止,我只能使用Spring Security并设置以下任一搜索基础来检索一组或另一组:

temp

OU=RoleGroups,OU=UEU,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com

只有当我将它们与简单的搜索过滤器一起使用时,它们才会返回结果:

OU=RoleGroups,OU=MOR,OU=rEU,DC=ah1,DC=ad,DC=megacorp,DC=com

带有(member=CN=Adam,OU=Users,DC=ah1,DC=ad,DC=megacorp,DC=com)库的Spring Security仅允许我进行一个查询,否则我将不得不开始重写第三方库类以进行第二次调用。

我一直在尝试找出是否可以应用以下2个SO问题中的任何一个:

LDAP root query syntax to search more than one specific OU

Spring LDAP authentication with multiple user OU and multiple access CNs

但是我仍然无法找到解决方案。据我所知,通过将所有内容更改为组而不是用户,我应该执行以下操作:

  

使用端口3268代替389

     

使用搜索基础spring-security-ldap

     

使用搜索过滤器DC=ah1,DC=ad,DC=megacorp,DC=com

,这应该将我的查询作为“全局目录搜索”来运行。我无法执行此操作-没有返回结果-我的搜索库从null到零长度字符串都具有上述变化,并且希望可以智能地更改搜索过滤器。

还有一种AD全局目录搜索技术,该技术使用对(&(objectCategory=RoleGroup)(objectclass=group)(member={0}))等的某种数字引用,但是要深入研究Microsoft AD是否具有类似的“ groupControl”属性,还远远不够。

我看到一个名为userAccountControl的组织单位,它是Active Directory,但我不知道是否应该像上面这样在搜索过滤器中引用它:

RoleGroups

&(objectClass=group)(member={0}))

我有&(objectCategory=RoleGroup)(objectclass=group)(member={0}))objectClassobjectclassobjectCategory的地方,只有反复试验才能指导我-到目前为止,都是错误。

>

当我尝试使用简单的过滤器从objectcategory搜索库进行搜索时,完全没有返回的组,这使我怀疑我可能配置了错误的内容。但是我不知道那是什么。我已经设置了可用的Spring配置属性,例如DC=megacorp,DC=comsearchSubtree=true

2 个答案:

答案 0 :(得分:1)

member属性具有DN语法,因此它希望整个用户的DN而不仅仅是CN来匹配组中的成员。

答案 1 :(得分:0)

我决定使用Microsoft AD客户端工具dsquery对问题进行更深入的研究。

最初,我在专有名称中的方括号有问题,例如:

$ dsquery user -samid craxyz01
"CN=Bloggs\, Joe (SUPERHERO AGSC),OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com"

要让dsquery做出回应,我必须逃脱括号:

$ dsquery * "DC=ah1,DC=ad,DC=megacorp,DC=com" -filter "(&(objectClass=group)(member=CN=Bloggs\, Joe \28SUPERHERO AGSC\29,OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com))"

此查询将向下钻取DC=ah1,DC=ad,DC=megacorp,DC=com下的所有组织单位,因此它将选择OU=UEUOU=MOR中的所有组。

现在在

的Java应用中

组搜索基础= DC=ah1,DC=ad,DC=megacorp,DC=com

and group search filter = (&(objectClass=group)(member={0}))

很明显,Spring做错了什么,也许没有转义斜杠/,但是由于反射的原因,很难说出来。它确实会调用LdapEncoder.filterEncode(),看起来应该可以正常工作。

感谢https://superuser.com/questions/1107493/dsquery-parameters

我将直接发布一个关于spring-security的新问题,并确保它能ping通该链接。