Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

S'authentifier avec Facebook
Twitter ou Google, à l'aide de la bibliothèque PAC4j, un tutoriel de Thierry Leriche-Dessirier et Jérôme Leleu

Le , par thierryler

0PARTAGES

6  0 
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/

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Aldian
Membre éclairé https://www.developpez.com
Le 04/06/2014 à 15:12
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 .
0  0 
Avatar de Jabbal'H
Membre confirmé https://www.developpez.com
Le 12/06/2014 à 12:15
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
<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
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
0  0 
Avatar de slidebend
Nouveau Candidat au Club https://www.developpez.com
Le 14/02/2015 à 10:27
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
<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
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
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
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.
0  0 
Avatar de hhfr
Membre régulier https://www.developpez.com
Le 28/09/2015 à 0:31
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.
0  0 
Avatar de thierryler
Rédacteur https://www.developpez.com
Le 28/09/2015 à 20:25
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...
0  0 
Avatar de hhfr
Membre régulier https://www.developpez.com
Le 04/10/2015 à 16:00
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
0  0 
Avatar de leleuj
Membre habitué https://www.developpez.com
Le 06/10/2015 à 9:52
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
0  0