LDAP过滤规则问题:无需指定组导入WebApp下所有组用户
解决Keycloak中AD用户导入的动态组过滤问题
核心问题原因
你之前尝试的(memberof=*)、(memberof=CN=*)等通配符写法无效,是因为AD的memberof属性存储的是组的完整DN(比如cn=g-backend,ou=admins,ou=groups,ou=users,dc=domain,dc=com),而非单纯的CN或前缀,简单通配符无法匹配这种结构化的DN值。
两种动态过滤方案
根据你的需求,提供两种适配不同场景的LDAP过滤规则:
方案1:匹配ou=webapp下所有组的成员用户
如果需要导入所有属于ou=webapp,ou=groups,ou=users,dc=domain,dc=com这个OU下所有组的用户,使用AD支持的链式匹配规则:
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=ou=webapp,ou=groups,ou=users,dc=domain,dc=com))
这个规则会自动匹配所有直接/间接属于该OU下组的用户,后续新增组到该OU时无需修改过滤规则。
方案2:匹配所有CN以g为前缀的组的成员用户
如果目标是导入所有属于CN以g-开头的组(比如g-backend、g-frontend)的用户,不管组在哪个子OU下,用以下规则:
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=(cn=g*,ou=groups,ou=users,dc=domain,dc=com)))
该规则会递归匹配所有CN前缀为g、且位于ou=groups,ou=users,...下的组的成员用户。
Keycloak配置说明
在Keycloak的LDAP用户联邦设置中,将上述规则直接填入LDAP Filter字段即可,无需额外添加括号或修改其他参数。
注意事项
- 确保Keycloak使用的LDAP服务账号拥有读取用户
memberof属性以及组信息的权限; - 链式匹配规则(
1.2.840.113556.1.4.1941)是AD特有的LDAP扩展,仅适用于Active Directory环境。
内容的提问来源于stack exchange,提问作者Banda
相关产品推荐
相关产品推荐

