Annonce

#1 2009-07-28 14:08:44

flipflip
Membre
Lyon
2005-03-19
2316

[Evolution] Authentification externe via un annuaire LDAP

Bonjour à tous,

Depuis quelques semaines j'essaie de mettre en place l'authentification externe mais via un annuaire ldap sur Piwigo. Après avoir passé le cap des requêtes sur l'annuaire, la comparaison des mots de passes je coince sur la récupération d'autres informations.

Mais avant d'aller plus loin un petit rappel (du moins ce que j'ai réussi à comprendre) sur la procédure d'authentification.
Dans le cas normal il existe 8 tables lié à la gestion des utilisateurs, la table #_users est le point névralgique de l'authentification. Elle contient le strict minimum (nom d'utilisateur, mot de passe, adresse e-mail) ensuite elle est secondée par la table #_user_infos qui elle contient le profil de l'utilisateur. Les autres  #_user* n'ont rien à voir avec l'authentification. Depuis la branche 1.6 (il me semble) a été introduit la notion d'authentification externe, le but est de pouvoir utiliser une autre table (d'un autre programme) pour gérer les accès. Le principe est simple, dans le fichier config_local.inc.php il suffit de remplir les correspondances pour le nom de la table de l'autre appplication, le champ nom d'utilisateur, mot de passe, e-mail). Mais aussi pour l'utilisateur invité et webmaster, vient ensuite une purge de certains enregistrement de Piwigo.

Dans la pratique la procédure est simple (une fois bien paramétré). Pour le cas d'un couplage avec le forum PunBB,  l'utilisateur toto possède un compte actif sur le forum. Lorsqu'il rentre ces informations de nom d'utilisateur et de mot de passe dans Piwigo la fonction getuserdata() dans functions_user.inc.php réalise une requête par rapport aux correspondances, Ensuite une autre requête est faite, elle permet de savoir si cet utilisateur c'est déjà connecté à Piwigo. Si oui alors la procédure continue, si non la table #_user_infos est remplie avec les valeurs par défaut définis dans la configuration de Piwigo et ensuite ça continue.

Dans cette configuration c'est tout simplement génial et très facile à mettre en place.

Maintenant le cas d'un annuaire Ldap. Pour faire simple un annuaire ldap permet de centraliser tout les informations de nom d'utilisateur, mot de passe, email et tout un tas d'autre information qui évolue suivant les applications utilisé. La grosse différence est qu'il n'est pas possible de faire des requêtes en SQL. Premier problème la correspondance des champs (peut varier suivant votre shema d'annuaire)

Code:

$conf['user_fields'] = array(
  'id' => 'id',
  'username' => 'uid',
  'password' => 'userPassword',
  'email' => 'mail'
  );

// guest_id : id of the anonymous user
$conf['guest_id'] = 1013;
// default_user_id : id of user used for default value
$conf['default_user_id'] = $conf['guest_id'];
// webmaster_id : webmaster'id.
$conf['webmaster_id'] = 1001;

Tout compte fait c'était pas si dure ;) Jusque là c'est ok niveau config. Pour le moment je passe sous silence l'utilisation d'un vrai compte, je réalise les tests uniquement avec le compte guest (invité). Je fais la purge et je recharge ma page et soudain c'est le drame :(

Code:

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /data/www/dev/galleries/html/2.0/include/functions_user.inc.php on line 274

En faute toujours la fonction gestuserdata() qui veut absolument faire une requête SQL... Pour contourner le

Code:

$row = array_merge($row, mysql_fetch_array($result));

problème je vois deux solutions :
- Créer une couche qui gère les différentes méthodes et qui est utilisable par les plugins;
- Ajout d'un trigger et c'est au plugin de s'adapter.

Je pense que la seconde méthode est la plus simple. Par exemple la fonction getuserdata() pourrait ressembler à ça en algo, particulièrement ce bout :

Code:

  $query = '
SELECT ';
  $is_first = true;
  foreach ($conf['user_fields'] as $pwgfield => $dbfield)
  {
    if ($is_first)
    {
      $is_first = false;
    }
    else
    {
      $query.= '
     , ';
    }
    $query.= $dbfield.' AS '.$pwgfield;
  }
  $query.= '
  FROM '.USERS_TABLE.'
  WHERE '.$conf['user_fields']['id'].' = \''.$user_id.'\'
;';

  $row = mysql_fetch_array(pwg_query($query));

Code:

MaVar est un tableau
MaVar = EntréePlugin('login_other', 'TableauUser')
Si MaVar est vide alors
  Lancement de la requête SQL
Fin si

Ça c'est le côté simple, et je pense que ça peut être facilement intégré. Au contraire il me semble que se genre de requête est réalisé à différent endroit de Piwigo et c'est à ce moment là qu'une couche d'authentification sera intéressante. Le core ne gère que des variables et la couche s'occupe de la communication avec les différents services d'authentification.

Bien sur les annuaires ldap sont rarement utilisé pour des applications sur le net, mais ils sont très courant en Intranet. Je ne sais pas si la team pense un jour évolué vers cette idée ?! En tout cas moi je sèche :)

Merci d'avoir pris le temps de me lire jusqu'à la fin.


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#2 2011-05-09 15:20:53

Cédric
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

Bonjour,

Navré pour ce détérage de topic....
J'aimerais savoir si vous aviez trouvé une solution pour votre plugin (j'ai recherché dans la jungle des plugins disponibles mais je n'ai rien trouvé concernant le LDAP).

Je doit mettre en place une galerie de médias dans mon entreprise.
Nous utilisons OpenLDAP pour tout les outils que j'ai mis ne place et j'aimerai avoir une galerie utilisant ma base LDAP pour l'authentification ainsi que la gestion des droits.
Malheureusement je n'ai trouvé aucune galerie le permettant.

Si vous avez trouvé une solution je suis preneur !

Merci par avance.

Cordialement.

Cédric

#3 2011-05-09 15:22:54

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: [Evolution] Authentification externe via un annuaire LDAP

Cédric a écrit:

Si vous avez trouvé une solution je suis preneur !

Il n'y a rien eu de neuf à ce sujet :-|


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#4 2011-05-09 16:53:58

Cédric
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

Dommage....
Une telle application devrait, à mon avis, intégrer ce type d'authentification (c'est tout ce qui lui manque pour que je l'adopte).
Aujourd'hui beaucoup d'outils inclus l'authentification LDAP soit de base soit par plugins additionnels (GLPI, Dokuwiki, Wordpress, Nagios, Grr, .....la liste est longue).

Est ce que cela sera prévu un jour ou l'autre ?

Dans tout les cas même si cette fonction n'est pas présente j'ai pu tester et bravo au dev, c'est un très bon boulot.

#5 2011-05-09 16:58:42

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: [Evolution] Authentification externe via un annuaire LDAP

Cédric a écrit:

Est ce que cela sera prévu un jour ou l'autre ?

Ce dont on manque ce sont des petites mains pour coder tout ça :-D


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#6 2011-06-14 09:28:49

flipflip
Membre
Lyon
2005-03-19
2316

Re: [Evolution] Authentification externe via un annuaire LDAP

Bonjour à tous,

Je reviens trainer mes paluches ici pour voir :) C'est surtout que je dois faire évoluer mon installation de Piwigo au boulot et cette fois elle doit être accessible à toute la boite donc pas le choix je vais devoir connecter Piwigo à l'annuaire LDAP. Avant que je me lance est-ce qu'il y a eu des évolutions de ce côté ?


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#7 2011-06-14 15:07:10

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12639

Re: [Evolution] Authentification externe via un annuaire LDAP

flipflip a écrit:

Avant que je me lance est-ce qu'il y a eu des évolutions de ce côté ?

Non, mais je viens de corriger des bugs sur le système d'authentifcation externe. Les corrections seront disponibles dans Piwigo 2.2.4


Les historiens ont établi que Pierrick était le premier utilisateur connu de Piwigo.

Hors ligne

#8 2011-06-14 16:28:02

flipflip
Membre
Lyon
2005-03-19
2316

Re: [Evolution] Authentification externe via un annuaire LDAP

J'avance sur le truc. Pour le moment pas touche au core de piwigo mais je test avec l'authentification externe et apache. L'idée est que se soit apache qui interroge l'annuaire ldap et non piwigo.

Dans le répertoire de votre installation créé un fichier .htaccess et ajouté ça dedans :

Code:

AuthLDAPURL ldap://AdresseDeLdap/dc=mondom,dc=fr?uid?sub?(objectClass=*)
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off

## Maintenant on lance une fenêtre d'authentification
AuthType basic
## Nom de la fenêtre d'authentification
AuthName "Restrited LDAP-protected area"
## On indique à Apache de regarder dans LDAP pour la liste des utilisateurs
AuthBasicProvider ldap
Require valid-user

Ensuite dans le fichier include/config_local.php, activer l'authentification par apache :

Code:

/ apache_authentication : use Apache authentication as reference instead of
// users table ?
$conf['apache_authentication'] = true;

Comment ça se passe ? Lors du chargement de la page, Piwigo vérifie si $_SERVER['REMOTE_USER'] comporte une valeur, si oui et si elle n'existe pas dans la base de Piwigo un compte est créé automatiquement en reprenant le nom d'utilisateur et le mot de passe. De cette manière il entre dans la gestion des users Piwigo (groupe, droit...). Le problème de cette méthode est que l'adresse e-mail n'est pas reprise.

Il y a un autre petit soucis avec la gestion des droits. Par exemple j'ai deux comptes, celui admin créé lors de l'installation, il possède tout les droits, si ce compte n'est pas présent dans votre annuaire vous ne pourrez pas vous connecter avec sans désactiver l'authentification apache. Maintenant j'ai mon vrai compte à moi (toto) qui existe dans l'annuaire, je me connecte sur le site, une boite me demande le couple utilisation/mot de passe, je remplie, il s'ajoute à Piwigo en visiteur. Si je veux le transformer en administrateur de nouveau je suis obligé de désactiver l'authentification apache, me connecter avec le compte admin et transformer toto en administrateur. On ajoute pas des comptes administrateurs tout les jours je suis d'accord.

Ces tests ont été fait sur la base d'une Piwigo 2.0.4 (ça marche même sur une version 1.7.2 ;) ) mais je pense pas que cette partie ai beaucoup changé en 2.2. Je continue mes test et si c'est concluant je passe en production :)

Dernière modification par flipflip (2011-06-14 16:44:03)


Le cerveau à des capacités tellement étonnantes qu’aujourd’hui pratiquement tout le monde en à un

Mon site : http://www.blogoflip.fr

Hors ligne

#9 2011-06-14 17:42:49

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Evolution] Authentification externe via un annuaire LDAP

flipflip a écrit:

Le problème de cette méthode est que l'adresse e-mail n'est pas reprise.

Il y a un autre petit soucis avec la gestion des droits. Par exemple j'ai deux comptes, celui admin créé lors de l'installation, il possède tout les droits, si ce compte n'est pas présent dans votre annuaire vous ne pourrez pas vous connecter avec sans désactiver l'authentification apache. Maintenant j'ai mon vrai compte à moi (toto) qui existe dans l'annuaire, je me connecte sur le site, une boite me demande le couple utilisation/mot de passe, je remplie, il s'ajoute à Piwigo en visiteur. Si je veux le transformer en administrateur de nouveau je suis obligé de désactiver l'authentification apache, me connecter avec le compte admin et transformer toto en administrateur. On ajoute pas des comptes administrateurs tout les jours je suis d'accord.

Ces tests ont été fait sur la base d'une Piwigo 2.0.4 (ça marche même sur une version 1.7.2 ;) ) mais je pense pas que cette partie ai beaucoup changé en 2.2. Je continue mes test et si c'est concluant je passe en production :)

Si Apache sait faire des requêtes LDAP compatible AD, il doit être possible de récupérer aussi l'adresse email si elle est renseignée dans les fiches d'utilisateurs. Il suffit de trouver le bon mot clé pour l'interrogation. Je n'ai pas accès à mon AD de chez moi, je ne peux donc pas donner plus de détails mais tu devrais pouvoir trouver dans la liste des attributs de tes users AD.

Hors ligne

#10 2011-06-14 17:48:10

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: [Evolution] Authentification externe via un annuaire LDAP

Erratum ! Laisses tomber mes propos ci-dessus, flipflip. J'ai fait un amalgame trop rapide entre un LDAP et Active Directory suite à une autre discussion. Mon truc n'a donc rien à voir ;-)

Hors ligne

#11 2011-11-25 13:22:58

Gnubibi
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

Hello,

Des news sur l'authentifiation via AD/LDAP ?
J'ai besoin aussi de mettre cette solution en place, par contre je n'y arrive pas via apache :(

A+

#12 2011-12-09 22:09:08

22decembre
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

En fait il s'agit juste là d'autoriser les gens à rentrer ou non sur le site. Authentification apache tout ce qu'il y a de plus basique.

Pas d'authentification d'administration. Je viens de tester suivant la méthode de ton blog. À moins que je me trompe bien sûr.

Quand je me connecte sur le site en ldap, je dois donner encore mes identifiants piwigo pour rentrer dans l'admin.

#13 2012-09-05 19:50:33

Gevrey
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

Bonjour,

J'ai suivant les indications pour autoriser l'authentification LDAP mais je rencontre un petit problème :
je n'utilise pas apache mais NGINX or celui-ci ne stocke pas l'utilisateur dans $_SERVER['REMOTE_USER'] mais dans $_SERVER['PHP_AUTH_USER'] et le mots de passe dans $_SERVER['PHP_AUTH_PW'] j'aimerais donc savoir dans quelle fichier la variable $_SERVER['REMOTE_USER']  ce trouve pour la remplacer par $_SERVER['PHP_AUTH_USER']  ?


Cordialement,

#14 2012-09-05 20:54:12

Gevrey
Invité

Re: [Evolution] Authentification externe via un annuaire LDAP

C'est bon j'ai trouvé, pour ceux qui cherche c'est dans include/user.inc.php à la ligne 57 :
foreach (array('REMOTE_USER', 'REDIRECT_REMOTE_USER') as $server_key)
qu'il suffit de remplacer par
foreach (array('REMOTE_USER', 'REDIRECT_REMOTE_USER','PHP_AUTH_USER') as $server_key)

Par contre en ce qui concerne le mots de passe d'après ce que j'ai lu si l'utilisateur n'existe pas il est créer avec un mots de passe vide :
register_user($remote_user, '', '', false);

Je trouve ça un peu étrange mais bon.

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact