Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2009 10:49:29

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

[resolu]Infos pour mixer de l'identification LDAP et MySQL

Bonjour à tous,
je vais essayer d'expliquer au mieux mon sujet.

J'ai developpé une application pour un intranet avec authentification et attribution de droits tout cela géré par 4 tables MySQL
- Profils : contient les différents profils pouvant être attribués aux utilisateurs
- Ressources : listant l'ensemble de mes ressources de mon application
- Droits : liant la table Profils et Ressources
- Utilisateurs : listant l'ensemble de mes utilisateurs avec leur login et leur mot de passe
Dans ma table utilisateur, j'ai un champ me permettant de savoir si l'utilisateur en question fait partie ou non de l'entreprise.

Ce qu'on me demande c'est de faire appel pour les utilisateurs appartenant à l'entreprise à leur login et mot de passe de l'annuaire LDAP pour ne pas avoir de nouveaux éléments à retenir.

Je ne sais pas si j'ai bien expliquer sinon n'hésiter pas a me demander d'autre informations.

Le but de ce post est de récupérer des avis quant à la démarche à suivre selon vous, voir si quelqu'un a déjà réaliser ce genre de chose, ... enfin je cherche des pistes pour orienter au mieux mon travail sans avoir à trop remodifier mon code ... enfin si c'est possible hmm

J'attends vos avis avec impatience.

Merci

Dernière modification par matdev (18-05-2010 16:20:17)

Hors ligne

 

#2 28-05-2009 12:01:22

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [resolu]Infos pour mixer de l'identification LDAP et MySQL

Une piste annexe serait d'importer les mots de passe du ldap dans ton sql.....

A voir comment les mots de passe du ldap sont modifiés actuellement pour voir si tu peux répercuter facilement le changement.

Pour le mix  je ne sais pas :s


Société : Direct Info Service

Hors ligne

 

#3 28-05-2009 14:10:31

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]Infos pour mixer de l'identification LDAP et MySQL

J'avais pensé, lors de la création d'un utilisateur, si on l'identifie comme appartenant à l'entreprise, ne pas afficher les champ login et mot de passe mais les récupérer directement en fonction du nom et prénom dans l'annuaire pour les insérer dans MySQL. Problème ce mote de passe est à changer tous les deux mois mais pas pour tout le monde en même temps celà dépend de la date de création.

Autre solution, à la création si l'utilisateur fait parti de l'entreprise on enregistre pas de login et de mot de passe. A mon formulaire d'identification, j'ajoute un choix "entreprise" ou "exterieur" et je fais les verif de tout ça dans mon controleur Auth.

Je sais pas trop vers quoi me tourner ... personne n'a eu quelque chose de similaire à faire ??? Quelqu'un aurait d'autre solution ???

Hors ligne

 

#4 29-05-2009 16:49:29

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]Infos pour mixer de l'identification LDAP et MySQL

Je crois que je vais cojiter sur ça un peu plus tard et passer à d'autres éléments plus importants pour l'instant mais si vous avez des avis ou des idées hésitez pas surtout.

Merci

Hors ligne

 

#5 30-05-2009 16:26:28

Willmore
Membre
Lieu: Savigny Le Temple
Date d'inscription: 25-05-2009
Messages: 31

Re: [resolu]Infos pour mixer de l'identification LDAP et MySQL

J'ai déjà vu ce genre de fonctionnement, et en gros ça fonctionnait suivant le processus suivant :
Note : dans ce cas, les utilisateurs sont créés à la volée s'ils sont authentifié par le LDAP.

Validation du formulaire de login par l'utilisateur avec username + password :

1- On se connecte au LDAP (on utilise pour celà un compte spécifique défini dans les paramètre de l'application)

2- On effectue une recherche dans l'arborescence voulue (définie dans la configuration de l'application) avec ldap_search avec un filtre du genre (&(objectClass=*)(uid="nom utilisateur"))

3-
  a. On ne trouve pas d'enregistrement -> on passe la main à l'authentification MySQL et on ferme la connexion LDAP

  b. Si on trouve un enregistrement LDAP correspondant : On récupère le DN correspondant, par exemple "uid=Jean, ou=People, o=Org, cn=domain" ainsi que les informations utilisée par notre appli (sn ou givenName et mail par exemple) et on ferme la connexion LDAP (ldap_unbind)

4- on se connecte de nouveau à notre LDAP et on bind avec le DN récupéré à l'étape 3 et le mot de passe fourni par l'utilisateur.

5-
  a. Si mot de passe pas OK -> on gère l'erreur et on averti l'utilisateur ("mot de passe incorrect"). On peut stocké ou non le DN et les autres info dans un registre ou en session pour éviter de répéter les étapes 1 à 3.

  b. Si mot de passe OK : on crée ou on met à jour un enregistrement dans MySQL avec les infos récupérées à l'étape 3b et on lance le processus pour déclarer l'utilisateur comme authentifié ( mise à jour de la session, régénération du session_id, chargement des ACL ...)

Note : le lien entre les utilisateur LDAP et les enregistrement MySQL se fait par la correspondance des login. Par exemple lorsque l'utilisateurs est identifié positivement par LDAP, on recherche l'enregistrement correspondant dans MySQL à l'aide d'une requête du Type

Code:

SELECT * FROM utilisateurs WHERE uid = "uid récupéré du LDAP ou du formulaire de login"

Avantages :
- plus besoin de saisir tout les utilisateurs à la main. On pourra définir un role par défaut pour les utilisateur provenant du LDAP afin qu'ils aient les droits correspondants même à leur première connexion (une modification des droits suivant les demandes pourra être faite en aval.
- Si le mot de passe est changé au niveau LDAP, le changement sera effectif immédiatement pour l'application aussi, vu qu'on laisse la vérification du password à LDAP. Les seuls mots de passe à gérer sont ceux des utilisateurs "100% MySQL"

Inconvénients : 2 connexions successives au LDAP sont nécessaires, mais je n'ai pas trouvé moyen de faire autrement avec l'architecture LDAP que j'avais utilisé.

Note : Si un utilisateur a des droits particuliers mais ne s'est pas encore authentifié, on peu créer à l'avance sont compte dans le MySQL et l'associer au rôle désiré, lors de sa première connexion, il sera identifié par le LDAP et l'application fera le lien automatiquement avec l'identifiant correspondant dans la base MySQL.


Le processus décrit est celui que j'ai pu mettre en place il y a quelques temps, mais à l'époque je n'utilisais pas encore Zend Framework, alors je ne saurai pas trop comment implémenter ce système avec les modules ZF (je suis encore un grand débutant du framework). A l'époque j'ai utilisé les fonction native du module PHP_LDAP.


J'espère que mes explications pourront t'aider.

Dernière modification par Willmore (30-05-2009 16:38:01)


Amicalement,

Will

Hors ligne

 

#6 02-06-2009 08:37:48

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]Infos pour mixer de l'identification LDAP et MySQL

Merci Willmore pour cette petite explication très riche.
Je vais garder cette logique sous le bras et voir pour l'implémenter avec Zend dans quelques semaines car j'ai de nouvelles priorités sur mon projet.
J'essaierai de faire part d'un retour de tout celà dès que possible.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages