基于 LDAP Active Directory 组的搜索未向下钻取以包含多个 OU
LDAP Active Directory group search on base not drilling down to include multiple OUs
我正在尝试为我的 Java 应用中的身份验证用户检索所有 AD 组,这些组来自两个不同的组织单位。到目前为止,我只能使用 Spring 安全性并设置搜索基础来检索一组或另一组:
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
这些只是 return 我将它们与简单搜索过滤器一起使用时的结果:
(member=CN=Adam,OU=Users,DC=ah1,DC=ad,DC=megacorp,DC=com)
Spring spring-security-ldap
库的安全性只允许我进行一次查询,否则我将不得不开始覆盖第 3 方库 类 以进行第二次调用。
我一直在尝试解决是否可以应用这两个 SO 问题中的任何内容:
LDAP root query syntax to search more than one specific OU
Spring LDAP authentication with multiple user OU and multiple access CNs
但我仍然找不到解决方案。据我所知,通过将所有内容更改为组而不是用户,我应该执行以下操作:
Use port 3268 instead of 389
Use search base DC=ah1,DC=ad,DC=megacorp,DC=com
Use search filter (&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
这应该 运行 我的查询作为 'global catalog search'。我无法让它工作 - 没有结果 returned - 我的搜索基础从 null 到零长度字符串再到上面的任何变化,并且希望智能地改变我的搜索过滤器。
还有一种 AD 全局目录搜索技术,使用某种数字引用 userAccountControl
等,但深入研究 Microsoft AD 是否有类似的 "groupControl" 还远不清楚属性。
我看到一个名为 RoleGroups
的组织单位,这是 Active Directory,但我不知道是否应该像上面这样在我的搜索过滤器中引用它:
&(objectClass=group)(member={0}))
或
&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
我有 objectClass
、objectclass
、objectCategory
或 objectcategory
,只有反复试验才能指导我 - 到目前为止,都是错误。
当我尝试使用简单的过滤器从 DC=megacorp,DC=com
搜索库中搜索时,完全没有 returned 组让我怀疑我可能配置了错误。但那是什么我不知道。我已经设置了可用的 Spring 配置属性,例如 searchSubtree=true
和 derefLink=true
成员属性具有 DN 语法,因此它需要整个用户的 DN 而不仅仅是 CN 来匹配组中的成员。
我决定使用 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 SUPERHERO AGSC,OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com))"
此查询向下钻取了 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()
,看起来应该可以工作。
感谢https://superuser.com/questions/1107493/dsquery-parameters
我将 post 一个直接关于 spring-安全的新问题,并确保它能 ping 回 link。
我正在尝试为我的 Java 应用中的身份验证用户检索所有 AD 组,这些组来自两个不同的组织单位。到目前为止,我只能使用 Spring 安全性并设置搜索基础来检索一组或另一组:
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
这些只是 return 我将它们与简单搜索过滤器一起使用时的结果:
(member=CN=Adam,OU=Users,DC=ah1,DC=ad,DC=megacorp,DC=com)
Spring spring-security-ldap
库的安全性只允许我进行一次查询,否则我将不得不开始覆盖第 3 方库 类 以进行第二次调用。
我一直在尝试解决是否可以应用这两个 SO 问题中的任何内容:
LDAP root query syntax to search more than one specific OU
Spring LDAP authentication with multiple user OU and multiple access CNs
但我仍然找不到解决方案。据我所知,通过将所有内容更改为组而不是用户,我应该执行以下操作:
Use port 3268 instead of 389
Use search base
DC=ah1,DC=ad,DC=megacorp,DC=com
Use search filter
(&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
这应该 运行 我的查询作为 'global catalog search'。我无法让它工作 - 没有结果 returned - 我的搜索基础从 null 到零长度字符串再到上面的任何变化,并且希望智能地改变我的搜索过滤器。
还有一种 AD 全局目录搜索技术,使用某种数字引用 userAccountControl
等,但深入研究 Microsoft AD 是否有类似的 "groupControl" 还远不清楚属性。
我看到一个名为 RoleGroups
的组织单位,这是 Active Directory,但我不知道是否应该像上面这样在我的搜索过滤器中引用它:
&(objectClass=group)(member={0}))
或
&(objectCategory=RoleGroup)(objectclass=group)(member={0}))
我有 objectClass
、objectclass
、objectCategory
或 objectcategory
,只有反复试验才能指导我 - 到目前为止,都是错误。
当我尝试使用简单的过滤器从 DC=megacorp,DC=com
搜索库中搜索时,完全没有 returned 组让我怀疑我可能配置了错误。但那是什么我不知道。我已经设置了可用的 Spring 配置属性,例如 searchSubtree=true
和 derefLink=true
成员属性具有 DN 语法,因此它需要整个用户的 DN 而不仅仅是 CN 来匹配组中的成员。
我决定使用 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 SUPERHERO AGSC,OU=Users,OU=Client,DC=ah1,DC=ad,DC=megacorp,DC=com))"
此查询向下钻取了 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()
,看起来应该可以工作。
感谢https://superuser.com/questions/1107493/dsquery-parameters
我将 post 一个直接关于 spring-安全的新问题,并确保它能 ping 回 link。