Spring Security 3.1 Active Directory-Authentifizierung
Bin ich Anschluss an meine ANZEIGE mit der nächsten Konfiguration:
class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
<beans:constructor-arg value="mydomain" />
<beans:constructor-arg value="ldap://my URL :389" />
<beans:property name="convertSubErrorCodesToExceptions" value="true"/>
</beans:bean>
Die Verbindung ist in Ordnung, denn wenn ich Schreibe ein Falsches login/Passwort, bekomme ich "bad credentials" (Benutzer wurde nicht gefunden im Verzeichnis)
Aber wenn ich versuchen, mit einer richtigen login und Passwort, bekomme ich eine exception:
org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 0
at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal(SpringSecurityLdapTemplate.java:239)
at org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider.searchForUser(ActiveDirectoryLdapAuthenticationProvider.java:258)
....
- Die Fehler, die Sie bekommen und zeigt an, dass der Benutzername/Passwort finden, scheiterten searchForSingleEntryInternal. Wenn Sie einen Haltepunkt auf Zeile 210 sehen, was die Werte der Parameter sind für den Aufruf von ctx.Suche(searchBaseDn, filter, params, searchControls);
- Versuchen Sie auch die Verwendung eines externen LDAP-tool (wie z.B. ldaptool.sourceforge.net) um zu sehen, ob Sie tun können, ein LDAP-bind mit dem Benutzernamen und dem Kennwort auf die domain in deinem test-setup.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie, dass die such-filter verwendet, die konsistent mit Ihren active directory-Einträgen.
Hatte ich die gleiche Ausnahme in meinem web-app vor kurzem. Die Benutzer-Anmeldeinformationen richtig sind, und die ActiveDirectoryLdapAuthenticationprovider war binding/Authentifizierung korrekt. Der Fehler ist aufgetreten nach der Bindung bei der Suche nach Gruppen und anderen Attributen des authentifizierten Datensatz.
Wenn du dir den code in ActiveDirectoryLdapAuthenticationprovider hat es hart codierte Werte für den such-filter-und er verwendet immer die binden AUFTRAGGEBER zu suchen.
diese Methode
Einen Jira-issue eingereicht worden ist, und hat bereits einen patch.
Den Fehler IncorrectResultSizeDataAccessException wurde verursacht durch einen bug im org.springframework.Sicherheit.web.die Authentifizierung.rememberme.JdbcTokenRepositoryImpl
wenn man sich in den folgenden code, wenn das token seriesId nicht vorhanden ist, sollten Sie nicht throw den Fehler "mehr als einen Wert".
Können Sie implementieren Sie eigene token-repository-dao, hier ist meins:
Folgenden wird das brauchbare configs für spring security:
Ich hatte das gleiche problem
IncorrectResultSizeDataAccessException
während Sie versuchen, Authentifizierung gegen Active Directory. Habe ich noch nicht gelöst, dieses Thema direkt, aber ich habe implementiert eine Problemumgehung, die voll funktionsfähig ist, aber bedeutet, dass Sie brauchen, um eine "service-Konto" Benutzername und Kennwort zum herstellen der Kommunikation mit AD. Ich denke, es nutzt die "Allgemeine" Spring LDAP-Ansatz, sondern als eine spezielle ANZEIGE ein.Habe ich nach dem Rezept hier:
Active Directory-Spring Security-XML-config, auf der SpringSource-forum
Hier mein
security-context.xml
Datei, Referenz: