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 :

Utiliser un CAS, un LDAP et une base de données


Sujet :

Spring Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Utiliser un CAS, un LDAP et une base de données
    Bonjour,

    je voudrais utiliser Spring Security pour faire la gestion d'accès d'un application web.

    J'ai en première ligne un CAS par lequel il faut forcement passer.
    En plus du CAS, je voudrais vérifier l'appartenance de la personne connecter à un groupe de l'annuaire pour accéder au site (Ce serait le ROLE_USER)
    Et enfin les pages /admin** seraient accessibles aux personnes qui sont en plus référencées dans table d'une base de données (ROLE_ADMIN).

    J'ai commencé la configuration du CAS, mais je ne sais pas comment procéder pour le reste. Je suppose qu'il faut créer un filter after CAS_FILTER pour modifier le role de l'utilisateur dans la classe userDetail. Ou peut être faut-il créer un userService maison ou authenticationProvider ? En gros je suis perdu dans les nombreuses classes ...

    voila ma config pour l'instant :
    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
     
    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
    		<property name="service" value="http://monsite.fr"/>
    		<property name="sendRenew" value="false"/>
    	</bean>
     
    	<sec:http entry-point-ref="casEntryPoint">
    		<sec:intercept-url pattern="/**" access="ROLE_USER"/>
    		<sec:intercept-url pattern="/admin**" access="ROLE_ADMIN"/>
    		<!-- <sec:custom-filter ref="myFilter" after="CAS_FILTER" />  -->
    	</sec:http>
     
    	<bean id="casFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
    		<property name="authenticationManager" ref="authenticationManager"/>
    	</bean>
     
    	<bean id="casEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
    		<property name="loginUrl" value="https://adresseDeMonCAS/login"/>
    		<property name="serviceProperties" ref="serviceProperties"/>
    	</bean>
     
    	<sec:authentication-manager alias="authenticationManager">
    		<sec:authentication-provider ref="casAuthenticationProvider" />
    	</sec:authentication-manager>
     
    	<bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
    		<property name="userDetailsService" ref="userService"></property>
    		<property name="serviceProperties" ref="serviceProperties" />
    		<property name="ticketValidator">
    			<bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
    				<constructor-arg index="0" value="https://adresseDeMonCAS/serviceValidate" />
    			</bean>
    		</property>
    		<property name="key" value="an_id_for_this_auth_provider_only"/>
    	</bean>
     
    	<sec:user-service id="userService">
    		???
    	</sec:user-service>
    J'avais fait ce type d'authentification avec des interceptor sans le module Security, donc je sais accéder aux données.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Bonsoir d'abord est ce que tu utilises les annotations pour l'accès à tes pages sécurisées?Si oui je te propose d'avoir 2 méthodes dont la première autorise l'accès qu'aux utilisateurs ayant le rôle CAS, une fois le rôle CAS vérifié tu l'envoies vers la méthode autorisée par les utilisateurs ayant pour rôle ROLE_USER. Car avec les annotations on est pas obligé de configurer la sécurité dans le contexte.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    merci pour ta réponse. Je ne m'étais pas trop penché sur les annotations dans security jusque là et c'est vrai qu'elles ont bien pratique.

    Mon problème était plus pour "affecter" les rôles aux utilisateurs lors de leur authentification, puisqu'ils sont données par l'appartenance à un groupe ldap pour l'un et la présence dans une table de bdd pour l'autre.

    J'ai trouvé une solution qui fonctionne.
    J'ai repris la configuration du CAS du sample Spring (Je pense qu'il y a moyen de faire une configuration la plus simple, mais bon...)
    J'ai créé un UserDetailsService maison qui va chercher mes infos dans le ldap et ma bdd et crée un UserDetails.

    Il faut maintenant que je vois comment faire pour utiliser Security pour utiliser le ldap juste pour retrouver un rôle (et pas d'authentification qui est faite par le CAS) au lieu de le faire avec ma classe maison.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Bonjour, si tu utilises déjà un UserServiceDetails, il ne t'appartient plus de gerer en dur le rôle des utilisateurs, c'est le travail de Spring-Security maintenant, il attribut le rôle automatiquement à chaque utilisateur connecté. Une fois que tu as un UserDetails, il suffit de récuperer le contexte de sécurité dans ta méthode puis récuperer ses rôles, sinon tu crées une méthode dans ton UserDetailsService qui renvoie les rôles de l'utilisateur connecté mais uniquement les rôles du ldap tout ceci est faisable. Par la suite tu crées une instance de ton UserDetailsService maison de ton contrôleur qui soit annotée par @Autowired pour à la fin récuperer ta méthode contenant les rôles du ldap de l'utilisateur connecté.

Discussions similaires

  1. Comment utiliser l'outil Talend pour administrer une base de données qui gère des fichiers
    Par JonasYounes dans le forum Installation, migration et administration
    Réponses: 1
    Dernier message: 04/08/2014, 21h23
  2. [MySQL] connexion d'un serveur ldap a une base de données
    Par youssef147 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/04/2010, 17h13
  3. Réponses: 3
    Dernier message: 18/01/2008, 20h45
  4. Réponses: 12
    Dernier message: 05/03/2007, 10h36
  5. Réponses: 11
    Dernier message: 08/06/2006, 18h07

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