Как углубиться в дерево LDAP, чтобы найти пользователя, который может аутентифицироваться весной в безопасности ldap - PullRequest
0 голосов
/ 01 июля 2019

Я хочу использовать аутентификацию Spring Security ldap. Однако я бы хотел рекурсивно пройти по дереву ldap. К сожалению, я могу найти пользователя только одного уровня или глубины.

Например, мое дерево пользователей любит ниже:

ouUsers: имеет пользователей (user1, user2 и т. Д.) И поддеревья (ouGenel, ouYatay).

И у поддеревьев есть поддеревья и пользователи.

Я хотел бы рекурсивно пройти по дереву ldap для аутентификации в весеннем проекте безопасности.

Мой весенний код аутентификации приведен ниже, что я должен изменить в своем коде? :

 @Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
            .ldapAuthentication()
            .userDnPatterns("CN={0},OU=ouUsers")
            .groupSearchBase("ou=ouUsers")
            .contextSource()
            .url(url+"/"+base)
            .managerDn(dn)
            .managerPassword(password)
            .and()
            .passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("sn");
}

Спасибо

1 Ответ

1 голос
/ 01 июля 2019

Вам нужно использовать userSearchFilter() и userSearchBase() вместо userDnPatterns().

  • userDnPatterns пытается сопоставить DN, подставив имя пользователя в предоставленном шаблоне, добавляя базу из URL LDAP.

    Это нормально, если все ваши пользователи хранятся в одном узле в каталоге.

  • userSearchFilter()с другой стороны, его можно использовать для сопоставления имени входа в обычном запросе с поиском по дереву (по умолчанию SearchScope = SUBTREE) по определенной базе.userSearchBase() при желании можно использовать для задания ветви rdn, где находятся записи пользователя и из которых можно выполнять поиск.Если не указан, поиск включает в себя весь каталог, начиная с базового dn URL-адреса LDAP.

Замена userDnPatterns () на следующее должно быть в порядке:

.userSearchBase('ou=ouUsers')
.userSearchFilter('(cn={0})')

https://docs.spring.io/spring-security/site/docs/3.0.x/reference/ldap.html#d0e5940

...