2016-05-09 11 views
0

Ich versuche Spring Security für die LDAP-Authentifizierung in meiner Spring MVC-Anwendung einzurichten. Ich kann nicht scheinen, dass die simple/principal-Authentifizierung mit dem LdapAuthenticationProvider funktioniert, also versuche ich den ActiveDirectoryLdapAuthenticationProvider zu verwenden, der das standardmäßig tut.Verwendung von ActiveDirectory mit Spring-Security LDAP

Ich bekomme eine NameNotFoundException mit dem detailMessage nach dem Kontext erstellt wird (und ich denke, LDAP-Bindung aufgetreten ist), von dieser Linie (310 in ActiveDirectoryLdapAuthenticationProvider.java):

return SpringSecurityLdapTemplate.searchForSingleEntryInternal(context, 
       searchControls, searchRoot, searchFilter, 
       new Object[] { bindPrincipal }); 

Fehlermeldung:

[LDAP: error code 32 - 0000208D: NameErr: DSID-03100213, problem 2001 (NO_OBJECT), data 0, best match of: 
'DC=my,DC=company,DC=com'] 

Der Suchfilter sucht nach einem Objekt mit der Klasse "user" mit einem userPrincipalName, der dem Benutzernamen entspricht, mit dem ich mich authentifiziert habe, und verknüpft mit dem Domänennamen für meine Domäne. Zum Beispiel "[email protected]". Das Attribut mit diesem Wert existiert, da ich mich mit JXplorer in dieser Methode authentifizieren kann und anschließend diese Suche ausführen kann, um mein Benutzerobjekt zu finden.

Die Konfiguration für meine WebSecurityConfigurerAdapter Unterklasse, wo ich Draht in einem AuthenticationManagerBuilder, das ist im Grunde:

@Autowired 
public void init(AuthenticationManagerBuilder auth) throws Exception { 
    ActiveDirectoryLdapAuthenticationProvider provider = 
      new ActiveDirectoryLdapAuthenticationProvider("my.company.com", "LDAPS://ad.my.company.com:636/dc=my,dc=company,dc=com"); 
    provider.setConvertSubErrorCodesToExceptions(true); 
    auth.authenticationProvider(provider); 
} 

Was die NameNotFoundException verursacht? Ist dies die richtige Konfiguration der ActiveDirectory-Authentifizierung?

Antwort

0

Gesichtspalme. Die URL des LDAP-Servers sollte zumindest im Fall meines Verzeichnisses den X.501-Domänenkomponententeil nicht enthalten. Ich denke, das macht Sinn, da das erste Konstruktorargument der Name der Domäne ist (im FQDN-Stil). Also sollten die Konstruktorargumente dann sein ...

Die Fehlermeldung darauf hingewiesen, wie die Bindung abgeschlossen, aber die Suche fehlgeschlagen. Der genaue Fehler hatte "NO_OBJECT" als Grund, was der Hinweis war, dass die Suchbasis ausgeschaltet war. Meine ursprünglich konfigurierte Suche hat die Suchbasis (DCs) im Wesentlichen zweimal hinzugefügt.