Java 基本上的LDAP Active Directory组搜索不深入以包括多个OU
我试图在Java应用程序中检索身份验证用户的所有广告组,这些组来自两个不同的组织单位。到目前为止,我只能使用Spring Security检索一组组或另一组,并设置以下任一搜索基础:Java 基本上的LDAP Active Directory组搜索不深入以包括多个OU,java,spring-security,ldap,spring-ldap,Java,Spring Security,Ldap,Spring Ldap,我试图在Java应用程序中检索身份验证用户的所有广告组,这些组来自两个不同的组织单位。到目前为止,我只能使用Spring Security检索一组组或另一组,并设置以下任一搜索基础: 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
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 ldap
库的Spring Security只允许我进行一次查询,否则我将不得不开始覆盖第三方库类以进行第二次调用
我只是想知道我是否可以应用这两个问题中的任何东西:
但我仍然找不到解决办法。就我所知,通过将所有内容改为“执行组”而不是“用户”,我应该做到以下几点:
使用端口3268而不是389
使用搜索库DC=ah1,DC=ad,DC=megacorp,DC=com
使用搜索筛选器(&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
这应该以“全局目录搜索”的形式运行我的查询。我不能让它工作-没有结果返回-我的搜索基础从空到零长度字符串的任何变化,并希望智能地改变我的搜索过滤器
还有一种广告全局目录搜索技术,它使用了对userAccountControl
等的某种数字引用,但深入研究微软广告是否有类似的“groupControl”属性还很不清楚
我看到一个名为RoleGroups
的组织单元,这是Active Directory,但我不知道我是否应该在我的搜索筛选器中引用它,如上所示:
&(objectClass=group)(member={0}))
或
&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
当我有objectClass
、objectClass
、objectCategory
或objectCategory
时,除了尝试和错误之外,我什么都没有,到目前为止,都是错误
当我试图使用一个简单的过滤器从
DC=megacorp,DC=com
搜索库中搜索时,完全没有返回的组,这让我怀疑我可能配置了错误的内容。但我不知道那是什么。我已经设置了可用的Spring配置属性,例如searchSubtree=true
,以及derefrink=true
成员属性具有DN语法,因此,它期望整个用户的DN,而不仅仅是CN匹配组中的一个成员。我决定使用Microsoft AD Client工具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))"
此查询深入查看下面的所有组织单位,无论是在OU=UEU
还是OU=MOR
中
现在在我的Java应用程序中
组搜索基数=DC=ah1,DC=ad,DC=megacorp,DC=com
和组搜索筛选器=(&(objectClass=group)(member={0}))
很明显,Spring做了一些错误的事情,可能没有逃过斜杠/
,但由于它的反射,很难判断。它确实调用了LdapEncoder.filterEncode()
,看起来它应该可以工作
多亏了
我将直接发布一个关于spring安全性的新问题,并确保它ping回链接。您的用户位于Microsoft Active Directory中的什么上下文?我不清楚你是在寻找某个群体的成员,还是??对不起,我只是把它编辑下来,以使我的问题更具可读性。我已经改正了。