[spip-dev] Petit sondage (SPIP/LDAP)

Salut,

Pourquoi pas :wink:
Ce qui serait bien c'est que tu nous expliques un peu comment peut
fonctionner une authentification LDAP :

- quels éléments sont stockés sur le serveur (nom ? login ? mdp ? email ?...)
- comment sont structurés les éléments sur le serveur
- comment est configuré l'accès au serveur

Tu peux tout stocker sur le serveur, je pense que SPIP nécéssite des éléments supplémentaires (attributeTypes en langage LDAP) pour y intégrer ce qui est aujourd'hui dans la table SQL.
Les éléments sont structurés de manière hiérarchique du type Organisation->Departement->Personnes. Ceci doit être laissé au choix de l'administrateur. SPIP se contenterai de demander les infos de l'utilisateur ayant tel login et tel mot de passe (rien: auth. échouée).
L'accès au serveur se fait via le réseau de manière classique, grâce aux fonctions LDAP de PHP. En gros voilà ce qui est simple de faire en principe :
  - Rechercher sur l'annuaire la fiche de la personne $user,$pass
  - Les attributs de la fiche sont stockés dans un tableau.
  - Fastoche !

Voilà !

Salut,

Tu peux tout stocker sur le serveur, je pense que SPIP nécéssite des éléments supplémentaires (attributeTypes en langage LDAP) pour y intégrer ce qui est aujourd'hui dans la table SQL.

A réfléchir un peu, je pense que ce serait préférable de garder la
table spip_auteurs et de n'utiliser LDAP que pour l'authentification
(quitte à synchroniser spip_auteurs si pas à jour). A priori, si on
utilise LDAP, c'est parce que l'annuaire existe déjà, donc on n'a pas
trop envie de le polluer avec des infos spécifiques à SPIP, si ?
L'annuaire LDAP pourrait contenir uniquement les infos suivantes :
login, nom, pass, mail. Y a-t-il une nomenclature standard pour ces
champs ?

Surtout, les auteurs sont utilisés un peu partout et notamment dans
les boucles ; ce serait ingérable d'avoir une méthode d'accès
différente.

a+

Antoine.

PS : si tu peux m'envoyer le code que tu as fait, ça me permettra
de mieux cerner la chose ;-))

Hello,

Je suis assez d'accord avec ce point là. On n'a pas forcément la main sur le LDAP, in extenso on ne peut pas toujours faire un grand
nombre de modif dessus.
Le mieux à mon avis serait de vérifier le couple login / mdp (classique) sur le LDAP, vérifier que l'utilisateur à bien le droit de
se connecter sur le SPIP en question (en récupérant un champ du LDAP qui comporte une valeur que connait SPIP) puis récupérer le
profil utilisateur dans la base Mysql.
A mon avis, c'est le plus simple à mettre en oeuvre, et cela procure l'avantage de pouvoir gérer le site même si le LDAP est tombé.

En fait je pense qu'on pourrait stocker sur le LDAP :

- login, pass (indispensable)
- nom, email (a priori c'est une info disponible, vu que c'est
l'intérêt d'un annuaire que de les stocker et de les contrôler ;
d'autre part ça évite d'avoir des auteurs par défaut sans nom ou
sans email)

Est-ce qu'il y a une nomenclature relativement standard pour
ces champs ? Dans les docs que je viens de compulser, j'ai vu
passer un champ nommé "cn" et "mail". Il y en a d'autres ?

A part ça, est-ce que tu connais des services LDAP publics
à fin de test sur le Net ?

Merci d'avance

a+

Antoine.

Ok, donc ca revient à faire ce que j'ai fait.
Je peux t'envoyer le code dès Lundi puisque les pages de notre intranet ne sont pas accessibles de l'extérieur du réseau.
en gros ce que j'ai fait :
Au lieu de renvoyer "echec d'authentification" je fais un ldap_search dans l'annuaire et je prend les champs cn, sn, givenname et mail cn: nom complet, sn: nom, givenname: prenom) ensuite j'ai un spip_query("INSERT spip_auteurs...")... Le problème est de définir les droits par défaut d'un utilisateur. On peut imaginer l'insérer en rédacteur et l'administrateur doit le passer admin s'il veut qu'il puisse poster. ca c'est dommage, car le principe d'un intranet dans ce genre c'est que tout le monde peut poster. J'ai donc fait le choix de faire les nouveaux utilisateurs administrateurs...

A reflechir,

A+

Pour ce qui est des LDAP publics en lecture, il y en a, mais pas avec l'attribut userPasswd.

Ah, oui, petite précision, il y a plsuieur méthodes d'authentification en LDAP.
1/ tu recherche uid=bidule et tu récupère userPasswd, mais ce champ peut être crypté de différentes manières suivant les applis.
2/ tu te connecte sur l'annuaire avec bidule/$pass et tu regarde si ca passe ou pas.

Petit récap des attributs
uid: login
userpasswd: mot de passe crypté
cn: nom complet (Yann Bizeul par exemple)
sn: nom (pas toujours utilisé)
givenname: prénom (pas toujours utilisé)

Je viens de voir que spip ne contient pas deux champs distincts pour nom et rpénom, donc autant utiliser le cn de l'annuaire.

Attention à la synchro :
- Ne pas supprimer un utilisateur s'il n'existe plus dans l'annuaire, mais sans doute invalider son compte (supprimer le mot de passe ?)
- Quand faire la synchro (de manière aléatoire lors du login de n'importe qui, à chaque login, de manière aléatoire lors de l'appel d'une page publique ?) perso, je pense plus pour la première solution.

Voilà, c'est tout ce que je vois pour l'instant !

Ben en même temps, ce qui est cool dans LDAP, c'est que tu peux y gérer tes droits pour TOUTES les applications. C'est fait pour recevoir tout ce que tu veux y mettre et tout centraliser.

   Par exemple, tel utilisateur change de service --> il a désormais le droit d'être administrateur dans SPIP...