Meine Firma hat Active Directory eingerichtet. Ich mache eine Anwendung, deren Anmeldesystem mit diesem AD verbunden werden sollte, also habe ich Spring LDAP-Authentifizierung eingerichtet, um es zu implementieren.LDAP-Suche AD findet keine Einträge
Aber wenn ich versuche, die Anwendung anzumelden, erhalte ich
Failed to locate directory entry for authenticated user: my.name
javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-03100213, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=dev,DC=company,DC=corp'
My Spring Security Code wie folgt aussieht:
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.formLogin();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService());
}
@Bean
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}
@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider("company.hr", "ldap://10.23.1.1:389/dc=dev,dc=company,dc=corp");
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
return provider;
}
}
Eines der Probleme ist, dass unsere AD-Struktur wirklich ist verzweigt und jede dieser Organisationseinheiten hat eine weitere Unterteilung:
Lesen auf LDAP, ich dachte, es nur den Pfad zu dem gemeinsamen übergeordneten Ordner sollte rekursive Suche durch den Baum und finden Sie den passenden Benutzer, egal, was OU sie sind, und tatsächlich, wenn ich einen dsquery
Befehl ausführen Prompt gibt es die abgefragten Benutzer zurück, egal wo sie sind. Dies geschieht jedoch nicht im Frühjahr. Ich habe so ziemlich alles gelesen, was es zu dem Thema zu finden gibt, und habe stundenlang debugged - aber es scheint, dass meine Parameter richtig eingestellt sind, trotzdem bekomme ich die Exception.
Meine Frage wäre - wie Spring zu sehen, dass der Benutzer tatsächlich in Active Directory ist, ohne die vollständige URL zu diesem bestimmten Benutzer anzugeben (da es Dutzende von verschiedenen Organisationseinheiten gibt)?
Führen Sie die Suche innerhalb von JXplorer durch, um den Parameter richtig einzustellen. Sie geben die Parameter und Werte für die von Ihnen verwendete Suche nicht an. Erscheint, dass Sie nach my.name suchen. Versuchen Sie dsquery user -amid mein.name – jwilleke