Безопасность Spring: конфигурация ldap - PullRequest
0 голосов
/ 30 октября 2018

У меня проблема с настройкой аутентификации LDAP с помощью Spring.

Использование LDAP Apache Directory Studio У меня установлено следующее рабочее соединение с сервером LDAP:

Bind DN or USER: cn=HIDDEN_USERNAME,OU=HIDDEN_OU1,OU=HIDDEN2,OU=Admin,DC=MY_COMPANYNAME,DC=COM
Authorization ID: SASL PLAIN only
Bind Password: ******

Используя это соединение, я могу найти свою учетную запись под root:

Root DSE/DC=MY_COMPANYNAME,DC=COM/OU=User Accounts/OU=Enabled Users/OU=Consultants/CN=MySurname My Name

Щелчок правой кнопкой мыши по моей учетной записи дает следующие значения:

DN: CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM
URL: ldap://IP_ADRESS:389/CN=MySurname%20MyName,OU=Consultants,OU=Enabled%20Users,OU=User%20Accounts,DC=MY_COMPANYNAME,DC=COM

Я собираюсь настроить WebSecurityConfigurerAdapter для получения аутентификации через ldap-сервер следующим образом:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
            .userDnPatterns("CN={0},OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM")
            .contextSource()
            .url("ldap://IP_ADRESS:389/")
            .managerDn("HIDDEN_USERNAME")
            .managerPassword("*****")
            .and()
            .passwordCompare()
            .passwordEncoder(new LdapShaPasswordEncoder())
            .passwordAttribute("userPassword");
}

Я пытался установить userDnPattern разными способами, но безрезультатно. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

В ответ на ваш комментарий выше: Active Directory скрывает поле пароля и не может быть прочитано даже администраторами домена.

Я согласен с другим пользователем, что для AD вам нужно использовать фильтр поиска пользователя, и если вы хотите сделать это для имени пользователя, вы должны использовать samaccountname={0}

0 голосов
/ 30 октября 2018

Используя указанный шаблон DN, ваша попытка входа в систему должна была бы быть сделана с идентификатором пользователя «MySurname MyName» (и пробел может быть проблемой). Предоставленная пользователем строка идентификатора входа в систему вставляется в шаблон DN, который вы включили выше, и вы будете связываться с

CN=MySurname MyName,OU=Consultants,OU=Enabled Users,OU=User Accounts,DC=MY_COMPANYNAME,DC=COM

Что соответствует тому, что кажется вашим полностью определенным DN. Если вы хотите иметь возможность войти в систему с вашим идентификатором, а не строкой фамилии / имени, которая составляет ваш CN, или если учетные записи, для которых требуется аутентификация, существуют в нескольких местоположениях OU, userSearch может быть предпочтительнее шаблонов DN.

Если вы проходите аутентификацию в домене Active Directory, вы можете использовать {0‹@domain.gTLD или DOMAIN {0} в качестве шаблона пользователя - когда указан идентификатор входа, эти шаблоны формируют userPrincipalName и sAMAccountName соответственно.

...