ldap按组成员查找对象

ldap find object by group member

我正在使用 spring ldaptemplate。我正在尝试从我的组中删除角色。架构如下。

ou=roles,cn=admin
member cn=key1,ou=Keys
member cn=key2,ou=keys

ou=roles,cn=user
member cn=key3,ou=Keys
member cn=key2,ou=keys

我想找出其成员 cn=key2 的角色。

我的查询是

ldapTemplate.search(
            query().where("objectclass").is("groupOfNames").and("ou")
                        .is(roles).and("cn").is("key2"), PERSON_CONTEXT_MAPPER);

我哪里遗漏了?他们是否使用 ldaptemplate 进行替代。

LDAP 搜索筛选属性值,因此您的搜索需要匹配成员属性:

ldapTemplate.search(
    query().
        where("objectclass").is("groupOfNames").
        and("member").is("cn=key2,ou=keys"), PERSON_CONTEXT_MAPPER);

请注意,在上述情况下,您需要提供要查找的用户的完整 DN。过滤器将匹配指定 DN 作为成员存在的所有 groupOfName 条目。

此外,请注意,您永远不应手动构建专有名称字符串,因为转义规则等非常棘手。要构建要包含在成员属性匹配中的用户 DN,请查看 LdapNameBuilder.

    List<String> list = ldapTemplate.list("ou=groups,dc=xyz,dc=com");
    Set<String> ldapGroupNames = list.stream()
       .map(group -> group.split("=")[1])
       .collect(Collectors.toSet());

    log.info("ldap Group Names:{}",ldapGroupNames);