Configuración Spring Security 2.04 para LDAP

Por si te sirve de algo, me costo un monton, aun estoy detras de una configuración hibrida, medio LDAP medio Base de Datos, pero por ahora les dejo una configuración básica del LDAP con el Nuevo Acegi.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:s="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
 
 
	<s:http>
		<s:intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<s:intercept-url pattern="/j_spring_security_switch_user"
			access="ROLE_SUPERVISOR" />
		<s:intercept-url pattern="/web/**" access="ROLE_USER" />
		<s:intercept-url pattern="/web/templates/**" access="ROLE_ADMIN" />
		<s:intercept-url pattern="/"
			access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<s:intercept-url pattern="/login.do"
			access="IS_AUTHENTICATED_ANONYMOUSLY" />
		<s:form-login login-page="/login.do" default-target-url='/web/index.do'
			authentication-failure-url="/login.do?login_error=1" />
			 <s:logout
		logout-success-url="/" />
		<s:http-basic />
		<s:anonymous />
		<s:logout />
	</s:http>
 
	<s:ldap-server id="ldapServer" url="ldap://localhost:389/ou=system"
		manager-dn="uid=admin,ou=system" manager-password="test" />
 
	<!--  grop srch base was groups -->
	<s:ldap-authentication-provider
		server-ref="ldapServer" user-search-filter="sAMAccountName={0}"
		user-search-base="" group-role-attribute="cn" group-search-filter="memberOf={0}"
		group-search-base="ou=groups" />
 
	<!-- sAMAccountName java.naming.referrel follow -->
 
	<bean id="contextSource"
		class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
		<constructor-arg value="ldap://localhost:389/ou=system" />
		<property name="userDn" value="uid=admin,ou=system" />
		<property name="password" value="test" />
	</bean>
 
	<bean id="ldapAuthenticationProvider"
		class="org.springframework.security.providers.ldap.LdapAuthenticationProvider">
		<constructor-arg>
			<bean
				class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator">
				<constructor-arg ref="contextSource" />
				<property name="userSearch" ref="userSearch" />
			</bean>
		</constructor-arg>
		<constructor-arg>
			<bean
				class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator">
				<constructor-arg ref="contextSource" />
				<constructor-arg value="cn=users,dc=development,dc=somecompany,dc=com" />
				<property name="convertToUpperCase" value="true" />
				<property name="defaultRole" value="Authenticated" />
				<property name="rolePrefix" value="" />
				<property name="searchSubtree" value="true" />
				<property name="groupSearchFilter" value="(memberUid={0})" />
				<property name="groupRoleAttribute" value="cn" />
			</bean>
		</constructor-arg>
	</bean>
 
	<bean id="userSearch"
		class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
		<constructor-arg index="0" value="ou=Users" />
		<constructor-arg index="1" value="(sAMAccountName={0})" />
		<constructor-arg index="2" ref="contextSource" />
		<property name="searchSubtree" value="true" />
	</bean>
 
 
</beans>

Tags: , , ,

4 Responses to “Configuración Spring Security 2.04 para LDAP”


  1. Gabriel
    on Nov 28th, 2008
    @ 3:22

    Hola,

    muchas Gracias por compartir tus conocimientos, estoy probando tu ejemplo aunque aun no logro que funcione del todo ya que tengo muchas dudas.. no tendras algun ejemplo que me puedas pasar por favor?? lo que estoy intentando hacer es la validación de usuario en LDAP y el cambio de contraseña pero no mi configuracion que he puesto es muy basica

    JAVA

    ModificationItem[] mod = new ModificationItem[1];
    mod[0] = new ModificationItem(LdapContext.REPLACE_ATTRIBUTE,
    new BasicAttribute(“userPassword”,
    userData.getNewPassword().getBytes()));
    ldapTemplate.modifyAttributes(dn, mod);

    XML

    ldap://A2536DZ46286858

    Veo que tu ejemplo tiene mas cosas (que no entiendo) y creo es lo que le falta a mi aplicacion..

    Para mi login todo funciona perfecto.. el problema es con el cambio de password que si lo hace pero no se refresca hasta que se baja el server(Websphere) he visto que se soluciona con PasswordComparisonAuthenticator en lugar de BindAuthenticator … pero bueno esto muy complicado ya que apenas voy iniciando con spring…

    Crees tener algun ejemplo o algo de información???

    Muchas gracias, tu ejemplo que aqui publicas me sera de mucha utilidad


  2. Jota
    on Nov 29th, 2008
    @ 16:28

    deberias poner todo el ejemplo…


  3. Gabriel
    on Dic 1st, 2008
    @ 20:02

    ok… ya estoy cambiando mi configuración para dejarla como la que muestras en el ejemplo quedando de la siguiente manera

    Estoy cambiando tambien el metodo que autentica (Pero creo que no paso bien los parametros como base, userDN… por que me genera el error 49)

    public LDAPUser getAuthenticatedUser(final String user,
    final String passwd, final Messages messages) {
    Name dn = null;
    List list = null;
    LDAPUser ldapUser = null;
    dn = buildDn(user, passwd);

    LdapContextSource ldapContextSource = null;

    ldapContextSource = (LdapContextSource) getLdapTemplate()
    .getContextSource();

    Object temp = null;
    Authentication authentication = null;
    List providersTemp = null;
    LdapAuthenticationProvider authenticationProvider = null;

    providersTemp = getAuthenticationManager().getProviders();

    if ((providersTemp != null) && (providersTemp.size() > 0)) {
    authenticationProvider = (LdapAuthenticationProvider) providersTemp.get(0);
    authentication = authenticationProvider.authenticate(new UsernamePasswordAuthenticationToken(
    user, passwd));
    temp = authentication.getPrincipal();
    System.out.println(“temp ” + temp);
    }

    System.out.println(“pause”);

    return ldapUser;
    }

    mi OpenDS esta estructurado de la siguiente manera

    dc=example, dc=com
    ou= People
    uid = user1
    uid = user2
    uid = 123456

    (Espero se vea el XML por que la vez pasada solo se mostro la URL)

    Gracias …


  4. Gabriel
    on Dic 1st, 2008
    @ 20:14

    <bean id=”authenticationManager” class=”org.springframework.security.providers.ProviderManager”>
    <property name=”providers”>
    <list>
    <ref local=”ldapAuthenticationProvider”/>
    </list>
    </property>
    </bean>

    <bean id=”contextSource” class=”org.springframework.security.ldap.DefaultSpringSecurityContextSource”>
    <constructor-arg value=”ldap://A2536DZ46286858″/>
    <property name=”userDn” value=”uid=123456″/>
    <property name=”password” value=”password”/>
    </bean>

    <bean id=”ldapAuthenticationProvider” class=”org.springframework.security.providers.ldap.LdapAuthenticationProvider”>
    <constructor-arg>
    <bean class=”org.springframework.security.providers.ldap.authenticator.PasswordComparisonAuthenticator”>
    <constructor-arg><ref local=”contextSource”/></constructor-arg>
    <property name=”userSearch” ref=”userSearch” />
    </bean>
    </constructor-arg>
    <constructor-arg>
    <bean class=”org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator”>
    <constructor-arg><ref local=”contextSource”/></constructor-arg>
    <constructor-arg><value></value></constructor-arg>
    </bean>
    </constructor-arg>
    </bean>

    <bean id=”userSearch”
    class=”org.springframework.security.ldap.search.FilterBasedLdapUserSearch”>
    <constructor-arg index=”0″ value=”ou=People,dc=example,dc=com” />
    <constructor-arg index=”1″ value=”(objectclass=*)” />
    <constructor-arg index=”2″ ref=”contextSource” />
    <property name=”searchSubtree” value=”true” />
    </bean>

    <bean id=”ldapDAO”
    class=”com…data.dao.impl.LdapDaoImpl”>
    <property name=”ldapTemplate” ref=”ldapTemplate”/>
    <property name=”authenticationManager” ref=”authenticationManager”/>
    <property name=”readEnvironmetVariables” ref=”readEnvironmetVariables”/>
    </bean>

Dejar una Respuesta

Spam Protection by WP-SpamFree

© 2009 Jotadeveloper Blog. Nuestros contenidos están bajo licencia Creative Commons mientras no se indique lo contrario,
y pueden reproducirse libremente sin más que mencionar la fuente ("JotaDeveloper") y la URL concreta del artículo original. .

This blog is powered by Wordpress and JotaDeveloperTheme.