2013-05-09 12 views
5

Ich habe Spring Security für die Authentifizierung gegen LDAP-Server konfiguriert.Spring LdapAuthentication und Laden von Rollen aus der lokalen Datenbank

<security:authentication-manager > 
    <security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 

</security:authentication-manager> 

Nach der Authentifizierung möchte ich Rollen aus der lokalen Datenbank für den gleichen Benutzer laden. Wie kann ich lokale Datenbankrollen mit "ldap-authentication-provider" laden?

Wenn ich die zweiten Authentifizierungsanbieter hinzufügen, wie unten:

<security:authentication-manager > 
    <security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 
      <security:authentication-provider ref="daoAuthenticationProvider" /> 
</security:authentication-manager> 

daoAuthenticationProvider hinzugefügt, aber Frühling verwendet nicht den zweiten Anbieter, wenn die erste Authentifizierungsanbieter den Benutzer authentifiziert. Nur wenn der erste Authentifizierungsanbieter sich nicht authentifizieren kann, geht er als nächstes in die Liste.

aussehen Also im Grunde wie wir

<security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 

laden Roles von der lokalen Datenbank anpassen müssen.

Irgendwelche Vorschläge? Wie sollte dies umgesetzt werden?

Antwort

5

Ein Authentifizierungsanbieter muss bei erfolgreicher Authentifizierung ein vollständig ausgefülltes Authentifizierungstoken bereitstellen. Daher ist es nicht möglich, einen Anbieter zum Überprüfen der Anmeldeinformationen des Benutzers und einen anderen zum Zuweisen von Berechtigungen (Rollen) zu verwenden.

Sie können jedoch einen LDAP-Auth-Provider so anpassen, dass Benutzerrollen aus der Datenbank abgerufen werden, anstatt das Standardverhalten zu verwenden (nach den Benutzergruppen in ldap zu suchen). Die LdapAuthenticationProvider hat zwei Strategien injiziert: eine, die die Authentifizierung selbst durchführt (LdapAuthenticator), und eine andere, die die Berechtigungen des Benutzers (LdapAuthoritiesPopulator) holt. Sie können Ihre Anforderungen erfüllen, wenn Sie eine Implementierung LdapAuthoritiesPopulator bereitstellen, die Rollen aus der Datenbank lädt. Falls Sie bereits einen UserDetailsService Server haben, der gegen die Datenbank arbeitet, können Sie diesen einfach integrieren, indem Sie ihn in eine UserDetailsServiceLdapAuthoritiesPopulator einpacken und in die LdapAuthenticationProvider einspeisen.

Da diese Konfiguration eher ungewöhnlich ist, bietet der Sicherheits-XML-Namespace keine Tags/Attribute zum Einrichten, aber die Konfiguration der Raw-Bean ist nicht zu kompliziert. Hier ist die Übersicht:

1) Ich nehme an, Sie haben eine ldap-server irgendwo in Ihrer Konfiguration. Es ist wichtig, ihm id zuzuweisen, was es uns später erlauben wird, darauf zu verweisen.

<security:ldap-server url="..." id="ldapServer" .../> 

2) Vom authentication-manager Abschnitt finden Sie nur auf den maßgeschneiderten Anbieter verweisen:

<security:authentication-manager> 
    <security:authentication-provider ref="customLdapAuthProvider"/> 
</security:authentication-manager> 

3) Nun wird der wesentliche Teil:

Die authenticator sind im Grunde des Das gleiche wie dasjenige, das durch die Namespace-Konfiguration erstellt würde. (Beachten Sie das contextSource Attribut, das auf den LDAP-Server verweist.)

Die authoritiesPopulator ist ein einfacher Wrapper um Ihre Implementierung, die irgendwo in Ihrer Konfiguration definiert werden soll.

+0

Das ist absolut was ich gesucht habe. – user2072797

+0

Gibt es eine Möglichkeit, userId dem Benutzer hinzuzufügen. map empID von ldap zum userId-Attribut in User-Objekt. – user2072797

+0

Diese Frage scheint nicht mit der ursprünglichen verwandt zu sein. Es ist wahrscheinlich besser, wenn du es neu formulierst und als neue Frage postest, weil im Moment nur ich es (praktisch) sehen kann, während andere Benutzer dir bessere Antworten geben können. Wie auch immer, die Zuordnung von Benutzerattributen von LDAP zu DB ist absolut möglich, aber das ist nichts, was Sie mit Spring Security tun könnten (könnten). – zagyi

Verwandte Themen