1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    octobre 2007
    Messages
    3 975
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 975
    Points : 11 782
    Points
    11 782

    Par défaut Tutoriel pour s'authentifier avec Facebook, Twitter ou Google, à l'aide de la bibliothèque PAC4j, en 5 minutes

    Les sites Web modernes permettent de s'authentifier via des services comme Facebook ou Gmail en plus du classique formulaire maison. Mais multiplier les solutions, c'est aussi se compliquer la vie à mettre en place de nombreux protocoles. La bibliothèque PAC4j existe heureusement. Elle propose une interface simple pour s'identifier auprès des fournisseurs les plus populaires, en quelques lignes de code seulement. Dans cet article, nous allons voir comment faire cela en cinq minutes chrono.

    http://thierry-leriche-dessirier.dev...a/pac4j-5-min/
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    mai 2008
    Messages
    418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2008
    Messages : 418
    Points : 898
    Points
    898

    Par défaut

    Bravo pour ce tutoriel très intéressant sur une problématique très technique qui gagnerait à être davantage connue .

    Une simple remarque, je trouve que vous sautez trop vite de l'introduction à la mise en œuvre. Quitte à risquer des redites, j'aurai bien vu un paragraphe intermédiaire rappelant la structure standard de l'appli web que l'on cherche à sécuriser, à quel endroit en terme d'architecture on va intervenir et comment la mise en place de la librairie va modifier le comportement de l'application non plus du point de vue du recetteur (déjà expliqué dans l'intro), mais du point de vue du développeur/débogueur. N'oublions pas que le domaine concerné n'est pas le plus accessible, ce serait dommage de réserver le bénéfice du tutoriel aux seules élites qui comprennent déjà parfaitement de quoi il retourne.

    Bon ceci posé tout ça on le comprend dans la suite du tuto, les filtres dans le web.xml permettent de comprendre comment les choses s'emboitent, mais un petit schéma n'aurait pas été un luxe .
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2004
    Messages : 403
    Points : 576
    Points
    576

    Par défaut

    Article intéressant, quelques remarques également.
    Pour ceux connaissant déjà Spring Security, je pense que çà le fait, mais lorsqu'on découvre (comme dans mon cas) il y a des parties qui sont passé sous silence, ce qui est assez frustrant.
    Exemple pour l'authenticationManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="authenticationManager" ref="authenticationManager" />
    Il faut le déclarer avant (du moins dans mon cas)

    Egalement pour le bean, j'ai fait avec Google :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bean id="googleClient" class="org.pac4j.oauth.client.Google2Client">
        <property name="key" value="gooKey" />
        <property name="secret" value="gooSecret" />
    </bean>
    Et dans mon cas, si je ne déclare pas le scope, donc ce que je veux recevoir, le context de spring security n'était pas rempli et il ne me renvoyait pas de Token.
    Je ne sais pas si c'est pareil avec Facebook cela dit.

    De même pour la "key" et le "secret" à passer, il aurait été bon de mettre en 1 ligne comment se les procurer (Google Dev par exemple)

    Et si l'on ne souhaite pas être trop exhaustif, mettre les sources auraient été bien, ca permet de vérifier si son paramétrage est bon.

    Après mon commentaire est la vision d'un débutant sur cette techno (pac4j et Spring-security).

    Mais l'article est tout de même intéressant et bien écrit.
    Voilà pour ma modeste participation
    " Je préfère comprendre les gens qui ne me comprennent pas "

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2014
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Déclaration de authenticationManager dans une implémentation Cas Server avec PAC4J

    Citation Envoyé par Jabbal'H Voir le message
    Article intéressant, quelques remarques également.
    Pour ceux connaissant déjà Spring Security, je pense que çà le fait, mais lorsqu'on découvre (comme dans mon cas) il y a des parties qui sont passé sous silence, ce qui est assez frustrant.
    Exemple pour l'authenticationManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="authenticationManager" ref="authenticationManager" />
    Il faut le déclarer avant (du moins dans mon cas)

    Egalement pour le bean, j'ai fait avec Google :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <bean id="googleClient" class="org.pac4j.oauth.client.Google2Client">
        <property name="key" value="gooKey" />
        <property name="secret" value="gooSecret" />
    </bean>
    Et dans mon cas, si je ne déclare pas le scope, donc ce que je veux recevoir, le context de spring security n'était pas rempli et il ne me renvoyait pas de Token.
    Je ne sais pas si c'est pareil avec Facebook cela dit.

    De même pour la "key" et le "secret" à passer, il aurait été bon de mettre en 1 ligne comment se les procurer (Google Dev par exemple)

    Et si l'on ne souhaite pas être trop exhaustif, mettre les sources auraient été bien, ca permet de vérifier si son paramétrage est bon.

    Après mon commentaire est la vision d'un débutant sur cette techno (pac4j et Spring-security).

    Mais l'article est tout de même intéressant et bien écrit.
    Voilà pour ma modeste participation
    Bonjour Jabbal'H,

    Comment est-ce que tu as déclaré le bean "authenticationManager" ?

    Pour ma part, j'ai mis en forme ceci (avec un implémentation du UserDetailsServiceImpl dans une classe Java) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <sec:authentication-manager alias="authenticationManager">
            <!-- <sec:authentication-provider ref="authenticationProvider" /> -->
            <sec:authentication-provider ref="userDetailsServiceImpl" />
       </sec:authentication-manager>
     
      <bean id="userDetailsServiceImpl" class="com.newmips.puzzle.service.UserDetailsServiceImpl" />
    Mais je prend une exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authenticationManager': Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
    Merci d'avance.

  5. #5
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2002
    Messages : 74
    Points : 87
    Points
    87

    Par défaut mais d'ou viennent les urls

    Tout d'abord merci Thierry pour cette article, qui m'a permit de connaitre la librairie.
    Mais je suis pas habitué à ce mécanisme oauth, j'ai bien compris que je devais m'inscrire sur twiter (par exemple), mais j'ai pas tout compris qu'en aux URLs à remplir sur twitter et dans le web.xml
    et surtout à quoi correspond l'url callback.
    De plus dois je mettre l'url du site cible, cela marchera t'il en test sur mon poste en localhost ?
    et enfin tu mets les twKey et twSecret en clair dans tes source ?
    sur Twitter ils disent de ne pas diffuser twSecret... non ? j'ai pas tout compris.
    De plus se genre d'authentification peuple t'elle le contexte JAAS ? Pourrais je utiliser les annotation Java EE style RoleAllowed etc... ???

    Merci de m'éclairer.

    Pour la demo de mon framework, ocelotds.org, la demo du chat, je voudrais améliorer la chose et permettre l'authentification.
    Ocelotds : java/javascript communication framework
    https://github.com/ocelotds/ocelot
    JEE7, EJB 3.X, JPA 2.X, Servlet 3.X, CDI 1.1, Websocket, JAX-RS....
    Netbeans 8 - Glassfish 4.x

  6. #6
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    octobre 2007
    Messages
    3 975
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2007
    Messages : 3 975
    Points : 11 782
    Points
    11 782

    Par défaut

    Oh la la, que de compliments... Il commence à dater cet article. Ca tombe bien qu'il y en ait un nouveau en préparation (et même deux en fait), d'autant que la lib PAC4J a beaucoup évolué, et dans le bon sens qui plus est...
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  7. #7
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    septembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2002
    Messages : 74
    Points : 87
    Points
    87

    Par défaut

    Normal pour les compliments, tout le monde ne se donne pas la peine...

    Bon ceci dit, cela ne résout pas mon problème.

    Si tu as quelques infos supplémentaires, ou mieux un brouillon de ton futur tuto, je serais un bon cobaye


    Cdt
    Ocelotds : java/javascript communication framework
    https://github.com/ocelotds/ocelot
    JEE7, EJB 3.X, JPA 2.X, Servlet 3.X, CDI 1.1, Websocket, JAX-RS....
    Netbeans 8 - Glassfish 4.x

  8. #8
    Membre habitué

    Homme Profil pro
    Architecte technique
    Inscrit en
    avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : avril 2014
    Messages : 2
    Points : 140
    Points
    140

    Par défaut Explications sur pac4j

    Bonjour,

    Je suis le créateur de pac4j.

    L'url de callback est nécessaire quand tu utilises un mécanisme d'authentification avec un fournisseur d'identités externe comme Facebook. La cinématique est la suivante :
    1) accès à une url protégée sans être authentifié
    2) redirection vers Facebook et authentification chez Facebook
    3) retour vers l'application sur l'url de callback, validation des credentials Facebook renvoyés, récupération du profil utilisateur
    4) redirection vers l'url protégée initialement demandée et accès à l'url protégée.

    Pour ton développement en local, il te suffit de configurer une url de callback en localhost. Toutes les démos pac4j fonctionnent en local.

    Quand tu configures un mécanisme d'authentification (nommé client en pac4j), il te faut définir les informations nécessaires. Pour Twitter, c'est l'identifiant et le secret. Ces informations sont stockées (en général en clair) dans ton application donc les utilisateurs n'y ont pas accès et la sécurité est assurée.

    pac4j n'a aucun rapport avec JAAS.

    En fait, il faut comprendre que pac4j est un moteur de sécurité pour Java qui supporte beaucoup de mécanismes d'authentification et notamment tout ce qui est lié aux web services dans sa dernière version. Mais ce qui t'intéresse ce sont les implémentations de pac4j pour ton framework préféré.
    Quelle technologie utilises-tu ?
    Si tu fais une simple webapp J2E, il faut utiliser j2e-pac4j et ses filtres de sécurité, si tu utilises Play, il te faut utiliser play-pac4j-java en Java et l'annotation RequiresAuthentication pour protéger tes urls...

    Je t'invite à poser tes questions directement sur la mailing list (que je consulte régulièrement) : https://groups.google.com/forum/?fro...um/pac4j-users et utiliser http://www.pac4j.org ou https://github.com/pac4j/pac4j comme point d'entrée pour toute information.

    Merci.
    Cdlt,
    Jérôme

Discussions similaires

  1. Créer des comptes avec Facebook, Twitter et Google
    Par PIEPLU dans le forum Langage
    Réponses: 1
    Dernier message: 27/08/2013, 15h11
  2. Tutoriel pour débuter rapidement avec les Windows.Forms ?
    Par Leelith dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/12/2008, 14h25

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