我的广告有这样的层次结构:
ou=webapp,ou=groups,ou=users,dc=domain,dc=com
在 ou=admins 中我有 CN 组,例如
cn=g-backend
、cn=g-frontend
等(g
是前缀组)
所有用户都包含在
ou=groups,ou=users,dc=domain,dc=com
中的多个OU中,例如ou=admins
、ou=office
等
我将用户添加到组 cn=g-backend 或 cn=g-frontend,但在 keycloak 应用程序中,我无法配置 ldap 过滤器来导入用户而不指定特定组,例如:
(|(memberof=cn=g-backend,ou=webapp,ou=groups,ou=users,dc=domain,dc=com)
(memberof=cn=g-backend,ou=webapp,ou=groups,ou=users,dc=domain,dc=com))
但是,是否有任何过滤器查询可以获取 ou 中所有 cn 组的所有用户,因为我想将来在 ou=webapp 中添加更多组并且不想重写查询?
我尝试过各种通配符
(memberof=*)
或 (memberof=CN=*)
或 (&(objectClass=user)(memberof=g*))
等 - 它不起作用。
不,LDAP 不支持这种间接。 (并且因为 memberOf 是 DN 值属性,所以它通常也不支持子字符串搜索。)如果您仅限于单个过滤器,那么您将需要一个所有用户都是其成员的组。
要么让所有用户成为主“g-all-keycloak-users”组的直接成员(当然除了您现有的组),
或将 groups 添加到父“keycloak-users”组,然后使用 Active Directory 特定的“链匹配”运算符来执行递归检查:
(memberOf:1.2.840.113556.1.4.1941:=CN=g-all-keycloak-users,OU=groups,etc,etc,etc)
(根据我对 Samba 4.x AD 实现的经验,使用此运算符的查询非常慢,所以我希望这不适用于 Microsoft AD。)