IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Annuaire LDAP avec Acegi


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Annuaire LDAP avec Acegi
    Bonjour a tous,

    je souhaiterais coupler un annuaire LDAP avec ACEGI pour sécuriser une application.

    adresse de mon LDAP : ldap://x.x.x.x:389/ou=people,dc=test,dc=fr

    éléments de code de mon fichier de configuration xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    ...
     
    <beans>
     
    <bean id="initialDirContextFactory" class="org.acegisecurity.ldap.DefaultInitialDirContextFactory">
    	<constructor-arg value="ldap://x.x.x.x:389/ou=People,dc=test,dc=fr"/>
    	<property name="managerDn"><value>cn=manager,ou=People,dc=aql,dc=fr</value></property>
    	<property name="managerPassword"><value>secret</value></property>
    </bean>
     
     
    <bean id="userSearch" class="org.acegisecurity.ldap.search.FilterBasedLdapUserSearch">
      <constructor-arg index="0"><value></value></constructor-arg>
      <constructor-arg index="1"><value>(uid={0})</value></constructor-arg>
      <constructor-arg index="2"><ref local="initialDirContextFactory" /></constructor-arg>            
      <property name="searchSubtree"><value>true</value></property>            
    </bean>            
     
     
    <bean id="ldapAuthProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider">
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<property name="userDnPatterns"><list><value>cn={0},ou=People</value></list></property>
    		</bean>
    	</constructor-arg>
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<constructor-arg><value>ou=People</value></constructor-arg>
    			<property name="groupRoleAttribute"><value>initials</value></property>
    		</bean>
    	</constructor-arg>
    </bean>
     
    ...
     
    <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
    		<property name="providers">
    			<list>
    				<ref local="daoAuthenticationProvider"/>
    				<ref local="ldapAuthProvider"/>
     
    				<bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
    					<property name="key" value="changeThis"/>
    				</bean>
    				<bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
    					<property name="key" value="changeThis"/>
    				</bean>
    			</list>
    		</property>
    	</bean>
     
    ...
    J'effectue mes tests avec l'application web fournie dans ACEGI qui sécurise les pages avec un login/password et un rôle.

    Mon serveur Tomcat se lance bien, il n'y a pas d'erreurs au démarrage mais après, je n'arrive pas à saisir un login/password correct.
    J'ai l'erreur suivante:

    Your login attempt was not successful, try again.
    Reason: Bad credentials


    Je ne sais pas d'ou provient mon erreur, connexion au LDAP ? mauvaise structure du LDAP ? ...

    Si quelqu'un voit le problème ou possède des éléments de solution, je suis preneur.
    Je vous en remercie par avance,

    cordialement,

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Vu le succès que j'ai eu avec ce sujet, je vais m'aider moi-meme. Je me dis que ca pourra peut être servir à quelqu'un plus tard...
    L'erreur que j'avais provenanit de la configuration de mon LDAP et non de la partie ACEGI.
    Voici les éléments du fichier de configuration qui permettent de faire fonctionner ACEGI avec LDAP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <bean id="initialDirContextFactory" class="org.acegisecurity.ldap.DefaultInitialDirContextFactory">
    	<constructor-arg value="ldap://x.x.x.x:389/dc=test,dc=fr"/>
    </bean>
     
    <bean id="ldapAuthProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider">
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<property name="userDnPatterns"><list><value>cn={0},ou=People</value></list></property>
    		</bean>
    	</constructor-arg>
     
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<constructor-arg><value>ou=People</value></constructor-arg>
    			<property name="groupRoleAttribute"><value>ou</value></property>
    		</bean>
    	</constructor-arg>
    </bean>
    Dans mon cas, je m'authentifie avec le cn (cn={0}) mais l'uid peut être utilisé également, ca dépend des situations.
    En revanche, j'ai toujours des problèmes avec le groupRoleAttribute. Je n'arrive pas à récupérer la valeur de mon attribut "ou" qui spécifie le role de l'utilisateur. Si quelqu'un voit mon problème, merci de me le signaler.
    Cordialement,

  3. #3
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 65
    Points
    65
    Par défaut
    J'ai également un soucis avec l'utilisation de ldap dans acegi.
    Jusque maintenant mon appli web utilise acegi + postgres mais l'intérêt serait d'utiliser une seule est même base pour la gestion des utilisateurs (windows, proxy, portail, ...) : Active Directory
    J'ai donc suivi bon nombre de tuto expliquant le jumelage d'acegi et ldap mais malheureusement l'authentification demeure impossible à priori à cause de cette erreur :

    2007-06-08 09:10:28 DEBUG [BindAuthenticator] Failed to bind as uid=berthel,ou=Informatique,ou=Utilisateurs,dc=PIERBURG,dc=FR: javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09030F, comment: AcceptSecurityContext error, data 525, vece ]
    2007-06-08 09:10:28 DEBUG [AuthenticationProcessingFilter] Updated SecurityContextHolder to contain null Authentication2007-06-08 09:10:28 DEBUG [AuthenticationProcessingFilter] Authentication request failed: org.acegisecurity.BadCredentialsException: Bad credentials
    Selon certains ce problème pourait provenir d'une "résolution" de rôle qui se fait mal, je m'explique l'utilisateur est retrouvé mais il est impossible de lui associer un rôle (ceci reste une hypothèse).

    voici quelques morceaux de ma configuration acegi-security

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <bean id="authManager" class="org.acegisecurity.providers.ProviderManager">
            <property name="providers">
                <list>
                    <!-- On utilise ldap pour stocker les informations -->
                    <ref local="ldapAuthenticationProvider" />
                </list>
            </property>
        </bean>
     
    <bean id="ldapAuthenticationProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider">
            <constructor-arg><ref local="authenticator"/></constructor-arg>
            <constructor-arg><ref local="populator"/></constructor-arg>
        </bean>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <bean id="authenticator" class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
            <constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
            <property name="userDnPatterns">
                <list>
                    <value>uid={0},ou=Informatique,ou=Utilisateurs</value>
                </list>
            </property>
            <!--<property name="userSearch"><ref local="userSearch"/></property>-->
        </bean>
     
    <bean id="populator" class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
            <constructor-arg>
                <ref local="initialDirContextFactory"/>
            </constructor-arg>
            <constructor-arg>
                <value>ou=Groupes</value>
            </constructor-arg>
            <property name="groupRoleAttribute">
                <value>cn</value>
            </property>
            <property name="searchSubtree">
                <value>true</value>
            </property>
        </bean>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="initialDirContextFactory" class="org.acegisecurity.ldap.DefaultInitialDirContextFactory">
            <constructor-arg value="ldap://monServeur:389/dc=maBoite,dc=FR"/>
            <property name="managerDn">
                <value>cn=monManager,dc=maBoite,dc=FR</value>
            </property>
            <property name="managerPassword">
                <value>monMDP</value>
            </property>
        </bean>
    la structure de l'active Directory est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FR
    |_ maBoite
             |___ Utilisateurs
             |            |____ Informatique
             |            |____ Achats
             |            |____ BE
             |            |____ ....
             |___ Groupes
                          |____ Groupes_Portail
                          |                    |_____ Administrateurs
                          |                    |_____ Responsables
                          |                    |_____ ...
                          |____ ...
    Si vous avez une piste pour m'aider, je suis preneur

    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <bean id="initialDirContextFactory" class="org.acegisecurity.ldap.DefaultInitialDirContextFactory">
    	<constructor-arg value="ldap://x.x.x.x:389/dc=test,dc=fr"/>
    </bean>
     
    <bean id="userSearch" class="org.acegisecurity.ldap.search.FilterBasedLdapUserSearch">
      <constructor-arg index="0"><value></value></constructor-arg>
      <constructor-arg index="1"><value>(cn={0})</value></constructor-arg>
      <constructor-arg index="2"><ref local="initialDirContextFactory" /></constructor-arg>            
      <property name="searchSubtree"><value>true</value></property>            
    </bean>
     
    <bean id="ldapAuthProvider" class="org.acegisecurity.providers.ldap.LdapAuthenticationProvider">
     
    	<!-- ****** AUTHENTIFICATION / IDENTIFICATION ****** -->
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<property name="userDnPatterns"><list><value>cn={0},ou=People</value></list></property>
    		</bean>
    	</constructor-arg>
     
    	<!-- ****** CONTROLE D ACCES ****** -->
    	<constructor-arg>
    		<bean class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
    			<constructor-arg><ref local="initialDirContextFactory"/></constructor-arg>
    			<constructor-arg><value>ou=Proto</value></constructor-arg>
    			<property name="groupRoleAttribute"><value>ou</value></property>
     
    		</bean>
    	</constructor-arg>
    </bean>
    ca devrait t'aider. la partie d'authentification est relativement simple.
    Pour les rôles, j'ai créé dans mons ldap un ou=Proto,dc=test,dc=fr dans lequel je créé différents rôles, par exemple : cn=admin,ou=Proto,dc=test,dc=fr Dans l'attribut member, je renseigne les dn de mes utilisateurs qui ont ce droit d'admin ex: cn=toto,ou=People,dc=test,dc=fr. Bien sur, l'attribut peut etre multi valué et ton utilisateur peut être présent dans plusieurs rôles.
    En espérant que ca te débloquera...

  5. #5
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2003
    Messages : 71
    Points : 65
    Points
    65
    Par défaut
    Merci beaucoup, en effet j'ai pris ton exemple simple en créant des groupes "test" dans mon AD et cela fonctionne, je vais essayer d'améliorer ma structure petit à petit pour essayer.

    Merci encore

Discussions similaires

  1. Annuaires LDAP avec OpenLDAP
    Par ram-0000 dans le forum Réseaux
    Réponses: 3
    Dernier message: 27/12/2016, 16h36
  2. [2.x] Une application pour gérer l'annuaire LDAP avec Symfony2
    Par sinko35 dans le forum Symfony
    Réponses: 6
    Dernier message: 29/05/2012, 17h22
  3. [Security] Etapes pour integrer ldap avec acegi
    Par bousnguar dans le forum Spring
    Réponses: 0
    Dernier message: 09/02/2009, 11h51
  4. Interrogation d'annuaire LDAP avec C++ Builder
    Par ptikiwi dans le forum C++Builder
    Réponses: 0
    Dernier message: 24/06/2008, 15h02
  5. API communicante avec un annuaire LDAP
    Par yoshï dans le forum REST
    Réponses: 0
    Dernier message: 21/04/2008, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo