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 :

Spring security + LDAP


Sujet :

Spring Java

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut Spring security + LDAP
    Bonjour a tous

    je suis en train de developper un mécanisme d'authentification pour mon appli web en utilisant le couple Spring-security / LDAP. Voici un bout de code que j'ai recuperé. Le hic c'est que j'ai du mal a comprendre cette partiei et que la documentation sur le net est quasi inexistante :

    Voici la partie de code (qui a mon avis doit faire le lien entre mon service et l'annuaire LDAP) et qui est plutot obscure opur moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Authentication authRequest = new UsernamePasswordAuthenticationToken(username, password);
    Authentication auth = _authenticationManager.authenticate(authRequest);
    SecurityContextHolder.getContext().setAuthentication(auth);
    HttpSession session = ServletUtils.getRequest().getSession(true);
     
    List<String>roleNames = new ArrayList();
    GrantedAuthority[] authorities = auth.getAuthorities();
    for (int i=0; i<authorities.length; i++) {
       roleNames.add(authorities[i].getAuthority());
    }
    Permissions permissions = new Permissions(roleNames);
    Dans le dossier WEB-INF , j'ai mon fichier securityContext.xml dans lequel j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <sec:ldap-authentication-provider 
            group-search-filter="member={0}" 
            group-search-base="ou=groups"
            user-search-base="ou=people"
            user-search-filter="uid={0}"
            group-role-attribute="cn"
        />

    Voila, si quelque ame charitable pouvait m'expliquer cette partie du code, je lui en serai très reconnaissant.
    Merci

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Je ne vois pas très bien comment ton exemple est utilisé... où est situé le code Java dans l'architecture, et la définition du xml ne me dis pas grand chose.

    j'ai très peu utilisé SpringSecurity, mais par contre pour le configurer avec un LDAP je n'ai quasiment pas eu besoin de taper de code Java.

    Juste eu besoin d'une config du type suivant:
    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
    <!-- Liste des providers d authentification -->
    <bean id="authenticationManager"
    	class="org.springframework.security.providers.ProviderManager">
    	<property name="providers">
    		<list>
    			<ref local="ldapAuthenticationProvider" />
    		</list>
    	</property>
    </bean>
     
    <!-- Contexte par défaut -->
    <!-- (Pour une authentification par comparaison de mot de passe, définir les propriétés de connexion admin) -->
    <bean id="initialDirContextFactory" class="org.springframework.security.ldap.DefaultInitialDirContextFactory">
          <constructor-arg value="ldap://monLdap:portLdap/o=mon.base.dn"/>
    </bean>
     
    <!-- Configuration du LDAP: dont les patterns dans lesquels sont stockés les utilisateurs -->
    <bean id="ldapAuthenticationProvider" class="org.springframework.security.providers.ldap.LdapAuthenticationProvider">
    	<!-- authentification par bind utilisateur -->
    	<constructor-arg>
    		<bean class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator">
    			<constructor-arg>
    				<ref local="initialDirContextFactory" />
    			</constructor-arg>
    			<property name="userDnPatterns">
    				<list>
    					<value>uid={0},ou=intra,o=utilisateurs</value>
    					<value>uid={0},ou=externe,o=utilisateurs</value>
    				</list>
    			</property>
    		</bean>
    	</constructor-arg>	
    	<!-- Utilisation du mapper pour récupérer les infos LDAP-->
    	<property name="userDetailsContextMapper">
    		<bean class="test.mappers.MyUserDetailsContextMapper" />
    	</property>
    </bean>
    Le seul code que j'ai du développé est le mapper, ce qui est de mémoire assez bien documenté.

    L'exemple ci-dessus est un bind direct de l'utilisateur pour l'authentification. Pour les habilitation, je pense qu'il est peut être nécessaire de faire un peu plus de développement et d'utiliser le RoleVoter, mais je n'ai pas trop vu cette partie là.

    En espérant que cela t'aide un peu...

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Je te remercie beaucoup pour ta réponse DakoR

    Ceci dit et même si je ne comprends pas tout, je prefère garder ce code qui marche très bien. Ce que je ne comprends pas bien, ce sont les différentes fonctions faisant partie de ce bout de code et leurs roles.
    De plus, je ne vois pas bien, ou se fait le lien entre le code Java, les fichiers de config xml de spring-security et LDAP...

    Le code Java ci-dessus, est appelé sur le clic du login (après avoir rentré username et password) et le fichier securityContext.xml fait référence aux données d'un fihcier ldif placé dans mon arborescence de fichiers.

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    pour le lien entre Java et le fichier XML c'est le framework Spring qui te fait le lien, normalement tu devrais charger les fichiers de configuration Spring dans le contexte via ton web.xml (ou alors de façon programmative mais je pense que c'est plus galère).

    Pour le lien avec ton LDAP, le directory LDAP devrait identifié via ldap-server.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <sec:ldap-server 
    		id="ldapContextSource" 
    		url="ldap://myserver:myport" 
    		manager-dn="CN=myManager,OU=myOU,DC=myDC"
    		manager-password="PRIVATE"/>
     
    <sec:ldap-authentication-provider 
    		server-ref="ldapContextSource" 
    		group-role-attribute="cn" 
    		group-search-base="OU=myOU,DC=cmyDC"
    		user-search-base="OU=myOU,DC=cmyDC" 
    		user-search-filter="(&amp;(extensionAttribute1={0}))" />
    Si tu utilises un fichiers ldif et que l'accès à celui-ci est défini dans le fichier de config, il me paraîtrait logique que ldap-authentication-provider ait une référence à ce dépôt...

    Après comme je le disais je ne connais pas trop la syntaxe de Spring Security avec les namespaces... donc à tester.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Ok merci DakoR. Tu confirmes ce que je pensais. Cela marche de la même manière, dans le principe, pour les autorisations que pour l'authentification j'imagine ?

    A savoir, a partir du moment ou la structure LDAP est correctement définie, c'est Spring qui fait les liens et qui te cherche tout ce qu'il faut.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    à savoir que l'authentification seule peut se faire grâce au AuthenticatedVoter et l'authentification/habilitation grâce au RoleVoter

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut
    Bon j'y vois un peu + clait sur Spring Security.
    Toutefois, si quelqu'un a une adresse web a me filer qui explique bien Spring security en général, je suis preneur (rien trouvé d'interessant, ca me déprime et me choque en même temps).

    Merci

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Perso je suis parti de la doc dispo sur le site et de tutoriaux sur Acegi disponible ici même

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Points : 185
    Points
    185
    Par défaut sessions concurrentes
    bonjour a tous

    un petit message matinal car j'aimerais bien avoir quelques avis concernant la gestion de certains points par Spring security.

    1/ un administrateur est loggué et change les droits d'un utilisateur qui est lui aussi loggué au même moment. Le changement de droits de cet utilisateur se fera-t-il une fois qu'il se sera déconnecté puis reconnecté (bien) ou instantanément (pas bien)

    2/ un utilisateur est-il toujours identifié de façon unique? Si je veux me logguer avec son compte depuis un autre poste, cela ne devrait pas être possible. (utilisation d'un token ?)

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2014, 11h06
  2. Spring security +Ldap
    Par sousouksousouk dans le forum Spring
    Réponses: 2
    Dernier message: 06/03/2013, 14h03
  3. Spring-Security LDAP
    Par shertoo dans le forum Frameworks Web
    Réponses: 0
    Dernier message: 11/06/2012, 20h59
  4. [Security] Spring Security + LDAP (newbie)
    Par mjarwoola dans le forum Spring
    Réponses: 0
    Dernier message: 27/09/2010, 10h37
  5. [Security] Spring Security LDAP - extension de schéma
    Par identifiant_bidon dans le forum Spring
    Réponses: 2
    Dernier message: 22/04/2009, 21h55

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