Я могу ответить на некоторые ваши вопросы, но поделюсь вашим основным вопросом.
Ответы на вопросы 2 и 3.
(&(objectClass=user)(userPrincipalName={0})
- это фильтр поиска по умолчанию, который можно заменить на
sAMAccountName={0}
для фильтра, если вы обнаружите, что он работает для вашей настройки.
((&cn={0})) // works for me
Это просто сопоставление с полями в записи AD, возвращенной через LDAP, и выражение {0}
где идентификационный номер будет подставлен при поиске.Вы должны настроить этот оператор так, чтобы он соответствовал структуре каталогов и фильтрации, которые вы хотите применить к своему поиску по Active Directory.Если указать слишком мало или недостаточно конкретные критерии фильтрации, возникнет исключение, например:
Ожидается 1, но найдено 5
Как и вы, я подозреваю, но не знаю,Основная безопасность может или должна быть установлена напрямую.Просматривая тестовые случаи , кажется, что это функция, которая автоматически использует Magic, поскольку метод для этого скрыт в скрытой ContextFactory.
Однако, если вычтобы открыть для этого другой класс Spring, этот ответ подчеркивает расширение GlobalAuthenticationConfigurerAdapter в качестве вложенного класса для WebSecurityConfigurerAdapter, и с этим вы можете установить базовое DN:
contextSource.setBase("OU=MyCo Global,DC=myco");
Полный код взят из примера, указанного выше:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest()
.fullyAuthenticated().and().formLogin();
}
@Configuration
protected static class AuthenticationConfiguration extends
GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource("ldap://<url>");
contextSource.setUserDn("<username>");
contextSource.setPassword("<password>");
contextSource.setReferral("follow");
contextSource.afterPropertiesSet();
LdapAuthenticationProviderConfigurer<AuthenticationManagerBuilder> ldapAuthenticationProviderConfigurer = auth.ldapAuthentication();
ldapAuthenticationProviderConfigurer
.userSearchFilter("(&(cn={0}))")
.userSearchBase("")
.contextSource(contextSource);
}
}
}