LDAP: код ошибки 34 — указан неверный DN

#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), и посмотреть, сможете ли вы заставить его сначала успешно привязаться к вашему пользователю.