#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