Spring Security LDAP: связывание и аутентификация в Active Directory в ApacheDS - PullRequest
0 голосов
/ 18 июня 2019

Что работает

Я разработал это против нашей компании AD:

@Bean
public AuthenticationProvider adProvider() {
    ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(
            adConfig.getDomain(), adConfig.getUrl(), adConfig.getRootDn());

    adProvider.setSearchFilter(adConfig.getSearchFilter());
    adProvider.setUseAuthenticationRequestCredentials(true);
    adProvider.setConvertSubErrorCodesToExceptions(true);
    adProvider.setAuthoritiesMapper(authorities -> List.of(new FooAuthority("*")));

    return adProvider;
}

Это работает; Я могу войти, используя учетные данные своей компании. Важно : я могу использовать свой sAMAccountName (который также является моим uid) для входа в систему.

Цель

Теперь я хочу провести несколько автоматических тестов для определенных крайних случаев, используя локальную AD. Я выбрал ApacheDS для его кроссплатформенности, плюс у него есть несколько доступных контейнеров Docker. Я использую openmicroscopy / apacheds , потому что он казался активным, задокументированным и настраиваемым, важным для новичка, такого как я.

Задача

Проблема в том, что я не могу войти в систему. Я проследил до двух строк в o.s.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider: пока searchForUser(ctx, username) в doAuthentication(...) (строка 148 в 5.0.12.RELEASE) работает с моим sAMAccountName (например, foobar ), contextFactory.createContext(env) в bindAsUser(...) (строка 204 в 5.0.12.RELEASE) требует полностью определенного DN (например, cn = foobar, ou = people, dc = acme, dc = com ) на работу.

Так что, похоже, на моей стороне какая-то неверная конфигурация, возможно, из-за моего недопонимания ... Кажется, мне нужен какой-то другой пользователь для аутентификации, чем для поиска после этого? Как мне это настроить, и / или почему AD нашей компании работает просто отлично? PS: я читал про анонимную аутентификацию, может наша компания разрешает такое? Но использование Apache Directory Studio против AD компании требует от меня входа в систему (насколько я могу судить) ...

1 Ответ

1 голос
/ 18 июня 2019

Простая операция BIND на основе LDAP всегда требует отличительного имени (DN) записи и пароля. Только AD позволяет выполнять операцию BIND с samAccountName. AD несколько особенный.

...