Получение LDAP: код ошибки 49 — неверные учетные данные . вложенным исключением является javax.naming.Исключение AuthenticationException при входе в систему

#java #spring-boot #spring-security #ldap #opendj

#java #пружинный ботинок #пружина-безопасность #ldap #opendj

Вопрос:

Получение [LDAP: код ошибки 49 — неверные учетные данные]; вложенным исключением является javax.naming .Исключение AuthenticationException: ошибка [LDAP: код ошибки 49 — неверные учетные данные]Найдите снимок экрана с ошибкой здесь. Когда я пытаюсь войти в систему из spring security. Я пробовал эту службу с OpenDJ 3.0, а также с версией 4.4.7. Сервер LDAP запущен на порту 1389. Ниже приведен мой код конфигурации LDAP.

 
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
        .anyRequest().fullyAuthenticated()
        .and()
      .formLogin();
  }

  @Override
  public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
      .ldapAuthentication()
        .userDnPatterns("uid={0}, ou=People")
       // .userDnPatterns("uid={0},ou=People")

        //.groupSearchBase("ou=groups,ou=users")
         // .groupSearchBase("ou=People")
        //.userSearchFilter("(cn={0})")
        .contextSource()
       //.setUserDn("cn=john,ou=Users,dc=testathon,dc=net")
       //.url("ldap://localhost:8389/dc=springframework,dc=org")
           .url("ldap://worker01:1389/dc=example,dc=com")
            .managerDn("cn=Directory Manager,dc=example,dc=com")
            .managerPassword("Password123") 
           // System.out.println("hi");
            //.managerPassword("{SSHA512}0B6MVegtPTE6DcK0pqzMfDRnC0CwRCrCliJD0txyYaNCb0tKR6B1m Jpp 7R5pNS1cAVuj2Ff0ao0pKxjsoGP5JaGPxqzyIR")
          .and()
          .passwordCompare()
          .passwordEncoder(new BCryptPasswordEncoder())
          .passwordAttribute("userPassword");
  }

}
  

Я могу войти на сервер OenDJ с панели управления с теми же учетными данными, и он работает нормально, я могу добавить новую запись, обновить пароль и удалить его, но когда я пытаюсь войти в систему из приложения spring boot, я получаю неверную ошибку учетных данных. Я также обновил пароль диспетчера каталогов из командной строки и успешно обновил его.

Я не могу найти решение. Ниже мой pom.xml досье.

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ldap</groupId>
    <artifactId>ldap-springboot-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ldap-springboot-service</name>
    <description>Project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
     <dependency>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.2</version>
  <type>maven-plugin</type>
</dependency> 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.ldap</groupId>
        <artifactId>spring-ldap-core</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
        <groupId>com.unboundid</groupId>
        <artifactId>unboundid-ldapsdk</artifactId>
</dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <!-- <version>3.0.0-M5</version> -->
        </plugin>
        </plugins>
    </build>

</project>
  

Комментарии:

1. Проверьте файл журнала доступа OpenDJ, и должна быть более подробная причина сбоя с результатом привязки, который завершается ошибкой 49.

2. Ниже приведены мои журналы

3. Вызвано: javax.naming. Исключение AuthenticationException: [LDAP: код ошибки 49 — неверные учетные данные] в java.naming/com.sun.jndi.ldap.LdapCtx.maperrorrorcode(LdapCtx.java:3259) ~ [na:na] в java.naming/com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java: 3205) ~ [na:na] в java.naming/com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java: 2991) ~ [na:na] в java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java :2905) ~[na:na] в java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:348) ~ [na:na] в java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapC … пропущено 60 общих фреймов

4. Когда я экспортирую LDIF-файл, пароль пользователя имеет префикс {BCRYPT} или {SSHA}. Я изменил схему хранения паролей на Bcrypt. Я могу использовать файл ldif, если удалю {BCRYPT} из пользовательского пароля.

5. dn: uid=дипак, подразделение = Люди, dc=пример, dc=com Объектный класс: верхний объектный класс: администратор, объектный класс: Организатор, объектный класс: персона sn: Patel cn: дипак Имя пользователя: Дипак Пароль пользователя: $ 2a $ 12 $9XQ6V1ytYU//F7qSNOpAW.uD.q7FEqLO35NvrzEFCLN71CRqDVSzG uid: дипак Метка времени создания: 20201118063555Z Имя создателя: cn=Диспетчер каталогов, cn= Корневой DNs, cn=идентификатор входа в конфигурацию: da5a65f6-775b-420a-91bd-07dd6f136c6b