Bonjour à tous,
Je suis actuellement en train de developper une classe PHP pour gérer les communications avec un server Active Directory via LDAPS.
Mon problème se trouve dans ma fonction chargée de vérifier si un user donné peut se logguer.
tout d'abord le code :
Cette fonction marche dans sa globalité mais mon problème est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public function login($userDN, $password) { if (!is_string($userDN) || $userDN == "") return false; $newConnection = ldap_connect($this->_informations['url'],$this->_informations['port']); ldap_set_option($newConnection, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($newConnection, LDAP_OPT_REFERRALS, 0); if (@ldap_bind($newConnection, $userDN,$password) === false) { var_dump(ldap_errno($newConnection)); exit; } else { ldap_unbind($newConnection); return true; } }
Lorsqu'un utilisateur doit changer son mot de passe soit l'attribut pwdlastset à 0, impossible d'avoir un bind successful. De plus, le code erreur affiché dans le var_dump(ldap_errno()) vaut 49 qui correspond à "mauvais identifiants"... Donc je n'ai trouvé aucun moyen pour demander à l'utilisateur de changer son mot de passe en ayant au préalable vérifié qu'il s'agit bien de lui car on ne peut pas récupérer la value 'unicodepwd', on peut juste la setter et j'ai essayé aussi de setter à la main la value de pwdlastset avec le timestamp AD courant afin de vérifier l'ancien mot de passe avant de lui proposer d'en rentrer un nouveau, mais impossible à setter non plus ...
Je commence à penser qu'AD et PHP ne sont pas de très grands amis ....
Pour récapituler, auriez vous une solution pour vérifier le couple login/mot de passe d'un utilisateur AD qui doit changer son mot de passe ?
Merci d'avance !
Partager