Salut, Sébastien Beyou a écrit :
Bonjour, Le Sat, 28 Feb 2009 21:27:10 +0100, Johan Cwiklinski <johan@xxxxxxxx> a écrit :Salut, J'ai essayé de me coller un peu à la création d'une classe qui permettrai l'authentification sur Galette depuis un serveur LDAP...Cool :) J'avais envoyé un mail un peu similaire en septembre sur LDAP (j'avais parlé d'aider, mais j'ai été un peu occupé justement à faire fonctionner le LDAP de notre asso entre autres - c'est maintenant fonctionnel, et j'ai un peu plus de temps maintenant). On se sert plutôt de Galette comme du fournisseur des données (pseudo, mdp), et Galette se sert de ses propres données pour l'authentification. Après les autres outils s'authentifient avec l'annuaire LDAP.J'ai un peu galéré, c'est la première fois que je me décide à installer un serveur LDAP. Bon, j'ai tout de même réussi à l'installer, le configurer, ajouter une entrée dedans et la retrouver depuis une classe PHP, je considère cela comme une grande victoire :-DEffectivement, je confirme, la bête est corriace.Lors de mes recherches, et en en discutant avec des amis, je me suis rendu compte que nous aurons d'emblée à gérer le "problème" Active Directory (AD pour les intimes) ; qui semble mettre un point d'honneur à tout faire autrement que les autres. Tant que l'on reste sur des choses assez simplistes, on peut intégrer AD je pense. Par contre, si ça devient trop compliqué, il serait mieux qu'il ait sa propre classe ; et ce ne sera pas moi qui développerai ça. Je veux bien me mettre un minimum à LDAP pour l'intégrer dans Galette, mais AD requiert un serveur Windows que je n'ai pas, et je n'ai pas non plus envie d'apprendre ce machin là ;-)Humm, connais pas.
Tu perds pas grand chose je pense :-D
Je ne suis pas ce qu'on peut appeler un pro de LDAP, et je me demande quels sont les directives de configuration à proposer côté Galette pour que ça puisse fonctionner de manière générique, sur quel(s) champ(s) effectuer la recherche du login, comment faire pour la vérification du mot de passe.Généralement, les logiciels supportant LDAP (je connais Postfix, MediaWiki, LimeSurvey, Sympa [1]) ont pas mal de paramètres relatifs à LDAP, comme le DN de connexion, son mdp, l'attribut et l'emplacement où faire les recherches d'authentification, vérifier ou non les groupes (et donc paramètres associés). Lors d'une authentification, les logiciels commencent par se connecter avec le DN de connexion (censé avoir les droits de lecture, voire d'écriture), recherche l'utilisateur, puis, s'il le trouve, vérifie le mdp (parfois se déconnecte du DN de connexion et tente de se reconnecter comme l'utilisateur pour vérifier le mdp). Pour ce que j'en ai compris.
Les paramètres que j'avais en tête sont : - l'adresse du serveur (monptitladap.com) - le dsn ('dc=monptitldap,dc=com') - un éventuel login et passe pour la connexion (si le serveur n'accepte pas les bind anonymes) - un filtre de recherche (genre "(uid=%s)" où '%s' est remplacé par le login de l'utilisateur qui essaie de s'authentifier. Avec ces quelques paramètres, je parviens à me connecter à mon ldap et à l'interroger pour récupérer mes infos. Pour la question du password, c'est une autre paire de manches. J'ai utilisé phpLdapAdmin et Luma pour entrer de nouvelles personnes, et tous deux m'ont proposé un chiffrage md5 pour le mot de passe de l'utilisateur ; chiffrage que je ne suis pas parvenu à reproduire en php - "md5('monpassword')" renvoie tout autre chose... En fonction de la méthode choisie, le passe est précédé de {MD5} qui visiblement nous donne son type, mais encore faut-il pouvoir depuis php faire correspondre les deux. Si d'autres méchanismes d'authentification au serveur LDAP lui même sont disponibles, je n'en ai pas connaissance. Pour l'histoire des groupe,s je ne sais vraiment pas comment faire... Pourrais-tu me donner un exemple (par fichier ldif, ce serait super) de la structure que vous avez adoptée pour votre ldap ? Enfin, je ne vois pas pourquoi se connecter, chercher, se déconnecter, se reloguer... Si l'utilisateur parvient à se loguer au LDAP, et qu'il appartient au(x) bon(x) groupe(s), c'est que c'est OK non ? En revanche, si l'utilisateur n'a de toutes façons pas le droit de se connecter au ldap (je ne sais pas si c'est possible), on se retrouve avec le souci du mot de passe... Je ne sais pas si je suis très clair, mais il est dimanche soir en même temps :-p
À priori, il faudra aussi songer à la gestion de groupes qui peut être différente d'une installation à l'autre (on peut par exemple stocker les groupes avec l'utilisateur, ou stocker les utilisateurs avec le groupe, ...). Bref, comment savoir qui dans l'annuaire peut avoir accès à Galette. J'aurai bien besoin de retours des personnes intéressées par cette fonctionnalité, ou qui auraient un peu plus d'expérience que moi avec ce type de serveurs (ça ne doit pas être bien compliqué d'en avoir plus puisque je n'en ai pas :-p). Merci d'avance et bonne soirée, JohanEn fait, il faut voir si Galette se content de lire LDAP (pour l'authentification, voire pour certains champs adhérent) ou va plus loin en proposant d'écrire dans LDAP (des champs adhérents). Comme Galette est déjà en soi une forme d'annuaire, il pourrait y avoir une fusion/symbiose avec LDAP, et dans le cas extreme se passer quasiment complètement de MySQL et tout enregistrer dans LDAP. (De même que OpenLDAP propose de stocker les données soit en fichier texte, soit en base de données, soit dans un autre annuaire LDAP.)
Non, le stockage des données de Galette est en MySQL/PostgreSQL pour le moment, je n'ai pas dans l'idée d'implémenter un stockage en LDAP (comment stocker les cotisations et autres ; les préférences de Galette ?). LDAP servira à l'authentification, point-barre. Au mieux, on pourra proposer une méthode de synchro LDAP==>Galette pour récupérer les infos de base de l'utilisateur lors de sa première connexion, ou à intervalles réguliers, ou sur demande, ... Bref, on peut faire un truc plus avancé, mais il reste hors de propos pour l'heure que Galette puisse écrire dans un annuaire LDAP. A terme, une synchro est envisageable, mais pas un remplacement pur et simple de la base de données - ldap ne sert pas à ça ;)
Je peux aider, soit à coder des trucs, soit en partageant ce que j'ai appris sur LDAP et sur les authentifications. Void quelques exemples de configs : * MediaWiki : http://www.mediawiki.org/wiki/Extension:LDAP_Authentication * Postfix : http://www.postfix.org/ldap_table.5.html * Sympa : http://www.sympa.org/manual/authentication * LimeSurvey : http://docs.limesurvey.org/tiki-index.php?page=LDAP+settings Remarque : en anglais, on dit "authentication" et non "authentification" pour le nom de la classe, qui, du reste est un bon départ je trouve. Pour information et comparaison, la classe AuthPlugin de MediaWiki (socle commun à l'authentification) : http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/AuthPlugin.php?view=markup
Je n'avais effectivement pas pensé à MediaWiki pour les exemples de code... J'ai principalement regardé comment ils font chez GLPI (https://dev.indepnet.net/glpi/browser/trunk/inc/auth.class.php), j'ai aussi regardé un peu la page de MRBS qui cause de l'authentification (http://mrbs.sourceforge.net/view_text.php?section=Documentation&file=AUTHENTICATION). Le truc que fait le second et que ne fait pas le premier, c'est de supporter plusieurs annuaires ; mais je pense qu'en supporter déjà un sera une belle évolution de Galette ;-)
Bonne soirée/journée, Sébastien Beyou
En tous cas, je suis preneur d'aide et de conseils ! La classe que j'ai pondue pour le moment n'est pas sur le SVN (c'est un WIP), mais je le tiens à disposition sans problèmes :-) Bonne soirée, Johan
Attachment:
signature.asc
Description: OpenPGP digital signature