Я работаю над проектом весенней загрузки maven для аутентификации пользователей, имеющих имя пользователя и пароль.Микросервис должен возвращать true / false, если пользователь аутентифицирован.
The SecurityConfiguration.java
package com.app.config;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.ProviderManager;
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.config.http.SessionCreationPolicy;
import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
private static final Logger logger = LoggerFactory.getLogger(SecurityConfiguration.class);
private String url = "ldaps://org.abc.in:3387";
private String domain = "org.abc.in";
private String userDNPattern = "CN=pan,OU=Users,OU=UCV,DC=org,DC=abc,DC=in";
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/", "logout").permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider());
}
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(domain, url);
adProvider.setConvertSubErrorCodesToExceptions(true);
adProvider.setUseAuthenticationRequestCredentials(true);
//adProvider.setAuthoritiesMapper(new NullAuthoritiesMapper());
return adProvider;
}
}
Я вызываю следующий метод, передавая имя пользователя и пароль
public Authentication signin(String username, String password) throws Exception{
Authentication auth = new UsernamePasswordAuthenticationToken("pan@abc.in", "password");
return authenticationManager.authenticate(auth); // this line gives Bad Credential error
}
Я получаю следующую ошибку при вызове метода authenticationManager.authenticate (auth)
ctiveDirectoryLdapAuthenticationProvider : Active Directory authentication failed: Supplied password was invalid
org.springframework.security.authentication.BadCredentialsException: Bad credentials
at org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider.badCredentials(ActiveDirectoryLdapAuthenticationProvider.java:308)
Причина: org.springframework.security.ldap.authentication.ad.ActiveDirectoryAuthenticationException: [LDAP: код ошибки 49 -80090308: LdapErr: DSID-0C09042F, комментарий: ошибка AcceptSecurityContext, данные 52e, v2580
Я прошел по следующим ссылкам: javax.naming.AuthenticationException: [LDAP: код ошибки 49 - неверные учетные данные]
Аутентификация Active Directory с использованием Spring Security 3.2, Spring Ldap 2.0 и JavaConfig
LDAP: код ошибки 49 - 80090308: LdapErr: DSID-0C0903A9,комментарий: ошибка AcceptSecurityContext, данные 52e, v1db1
На основе приведенных выше ссылок я пробовал setAuthoritiesMappи я передал NullAuthoritiesMapper, поскольку у меня нет прав доступа к карте.
adProvider.setAuthoritiesMapper(new NullAuthoritiesMapper());
Я попытался внести изменения в userDNPattern = "CN=pan,OU=Users,OU=UCV,DC=org,DC=abc,DC=in";
, но это не сработало.CN = pan - мое имя пользователя
Я могу получить доступ к Apache Active Directory с указанным выше URL, доменом и userDnPattern и паролем.Нужно ли кодировать пароль?