在搜索过滤器中使用通配符模式对嵌套组进行 Active Directory 搜索查询
Active Directory search query for nested groups with wildcard pattern in search filter
我正在尝试允许 Active Directory 中嵌套组的用户登录到我的基于 spring boot/security 的应用程序。我想出了如何通过 spring-安全配置提供搜索查询,但我在搜索查询本身方面遇到了问题。
这是当前按预期工作的搜索查询:
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group1,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local))
这是按预期工作的,因为 user1 属于 parent_group1 或其子组之一。但是我有不止一个 parent_group,前缀不变。所以我试图在该查询中提供通配符 CN=parent_group*
,但它不起作用。
我看到了一个变体 ,其中每个 parent_group 都可以添加一个 OR,如下所示:
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(|(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group1,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group2,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group3,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
这也行得通。但这样做的问题是,每次添加新的父组时都需要更新。我已经完成了上述问题的答案中指定的 link,但没有任何效果。
理想情况下,我希望这样的事情会起作用(parent_group 的通配符模式):
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group*,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local))
但是它不起作用。它没有 return 任何结果。如果有更好的方法,有人可以帮助我吗?
还有,能不能这样不提整个层级?
CN=parent_group*,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local
我已经对此进行了几天的研究,并浏览了在线或 SO 上提供的大部分文章,但没有使用链命令通配符模式目前有效。
无法按照您描述的进行操作。如果拥有一个父组,您的所有 "other" 父组都嵌套在其中,您会得到很好的服务。任何时候创建一个新的父组,您都可以将它嵌套在您的主组中,以便它被授予访问权限。这是一个很常见的模型。
我正在尝试允许 Active Directory 中嵌套组的用户登录到我的基于 spring boot/security 的应用程序。我想出了如何通过 spring-安全配置提供搜索查询,但我在搜索查询本身方面遇到了问题。
这是当前按预期工作的搜索查询:
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group1,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local))
这是按预期工作的,因为 user1 属于 parent_group1 或其子组之一。但是我有不止一个 parent_group,前缀不变。所以我试图在该查询中提供通配符 CN=parent_group*
,但它不起作用。
我看到了一个变体
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(|(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group1,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group2,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group3,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local)
这也行得通。但这样做的问题是,每次添加新的父组时都需要更新。我已经完成了上述问题的答案中指定的 link,但没有任何效果。
理想情况下,我希望这样的事情会起作用(parent_group 的通配符模式):
(&(objectCategory=Person)(userPrincipalName=user1@domain.local)
(memberOf:1.2.840.113556.1.4.1941:=CN=parent_group*,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local))
但是它不起作用。它没有 return 任何结果。如果有更好的方法,有人可以帮助我吗?
还有,能不能这样不提整个层级?
CN=parent_group*,OU=Another Group,OU=Groups,OU=Company,DC=Company-Domain,DC=local
我已经对此进行了几天的研究,并浏览了在线或 SO 上提供的大部分文章,但没有使用链命令通配符模式目前有效。
无法按照您描述的进行操作。如果拥有一个父组,您的所有 "other" 父组都嵌套在其中,您会得到很好的服务。任何时候创建一个新的父组,您都可以将它嵌套在您的主组中,以便它被授予访问权限。这是一个很常见的模型。