【问题标题】:LDAP Active Directory group search on base not drilling down to include multiple OUs基于基础的 LDAP Active Directory 组搜索不向下钻取以包含多个 OU
【发布时间】:2019-08-03 07:48:13
【问题描述】:

我正在尝试在我的 Java 应用程序中检索身份验证用户的所有 AD 组,其中这些组来自两个不同的组织单位。到目前为止,我只能使用 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=Adam,OU=Users,DC=ah1,DC=ad,DC=megacorp,DC=com)

spring-security-ldap 库的 Spring Security 只允许我进行一次查询,否则我将不得不开始覆盖第 3 方库类才能进行第二次调用。

我一直在尝试确定我是否可以应用以下 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

使用搜索库DC=ah1,DC=ad,DC=megacorp,DC=com

使用搜索过滤器(&(objectCategory=RoleGroup)(objectclass=group)(member={0}))

这应该将我的查询作为“全局目录搜索”运行。我无法让它工作 - 没有返回结果 - 我的搜索库从 null 到零长度字符串到上述任何变化,并希望智能地改变我的搜索过滤器。

还有一种 AD 全局目录搜索技术,使用某种数字引用 userAccountControl 等,但深入研究 Microsoft AD 是否有类似的“groupControl”属性还远不清楚。

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

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

&(objectCategory=RoleGroup)(objectclass=group)(member={0}))

我有 objectClassobjectclassobjectCategoryobjectcategory,只有反复试验来指导我 - 到目前为止,这都是错误的。

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

【问题讨论】:

  • 您的用户位于 Microsoft Active Directory 中的哪些上下文?我不清楚您是否正在寻找属于某个组的成员??

标签: java spring-security ldap spring-ldap


【解决方案1】:

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

【讨论】:

  • 抱歉,我只是将其编辑下来以使我的问题更具可读性。我已经更正了。
【解决方案2】:

我决定使用 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=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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多