#spring-security #active-directory #ldap
#spring-безопасность #active-directory #ldap
Вопрос:
Я новичок в Active Directory и Spring security, на самом деле, я хочу изменить свою конфигурацию Spring security, чтобы использовать active directory при аутентификации, поэтому я использую это в своем SecurityConfig:
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
auth.eraseCredentials(false);
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider authenticationProvider = new ActiveDirectoryLdapAuthenticationProvider(
"dc=example,dc=com", "ldap://localhost:10389/dc=example,dc=com");
authenticationProvider.setConvertSubErrorCodesToExceptions(true);
authenticationProvider.setUseAuthenticationRequestCredentials(true);
authenticationProvider.setUserDetailsContextMapper(mapper);
return authenticationProvider;
}
и Active directory studio У меня есть раздел: dc=example,dc=com
который содержит запись ou=people
.
Когда я пытаюсь ввести имя пользователя и пароль, у меня возникает эта ошибка:
javax.naming.Исключение InvalidNameException: [LDAP: код ошибки 34 — указан неверный DN: admin@dc=example, dc= com (0x73 0x79 0x73 0x61 0x64 0x6D 0x69 0x6E 0x40 0x64 0x63 0x3D 0x70 0x75 0x70 0x70 0x75 0x74 0x2C 0x64 0x63 0x3D 0x63 0x6F 0x6D) недопустимо] в com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3076) в com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java: 2883) в com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java: 2797)..
У вас есть какие-нибудь идеи, пожалуйста?
Комментарии:
1. Если вы используете Mac, убедитесь, что
amp;quot;
в вашем build.xml файл
Ответ №1:
ActiveDirectoryLdapAuthenticationProvider
предназначен для проверки подлинности с использованием имен пользователей в форме, специфичной для AD user@example.com
, которые не являются стандартным форматом LDAP DN. Таким образом, первым аргументом в конструкторе должен быть domain ( example.com
), а не LDAP DN. Когда вы входите в систему как admin
, код использует настроенный домен для построения строки admin@example.com
и передает ее в AD.
Поскольку вы используете dc=example,dc=com
в качестве доменного имени, в итоге admin@dc=example,dc=com
получается недопустимое значение.
Комментарии:
1. Спасибо за ваш ответ, но я пробовал это раньше, и у меня такая же ошибка [LDAP: код ошибки 34 — указан неверный DN: user@example.com
2. Формат
user@domain
имени будет работать только для домена, для которого AD настроен для аутентификации. Почти не имеет значения, что он использует LDAP под капотом. Если вы создали какой-то другой раздел, я сомневаюсь, что он будет работать, и вам придется использовать простой подход LDAP.3. Спасибо, мистер Шон, но что вы подразумеваете под использованием простого подхода LDAP?
4. Я имею в виду, что вам придется рассматривать AD как стандартный сервер LDAP. Однако, если вы новичок в LDAP, AD и Spring Security, это, вероятно, будет непросто, и вам нужно будет провести некоторое исследование. Я бы рекомендовал вам начать с простого клиента Java LDAP, написанного в простой
main
функции (без Spring), и посмотреть, сможете ли вы заставить его сначала успешно привязаться к вашему пользователю.