J'ai récemment activé l'authentification basée sur LDAP sur mon domaine. Cela nous a permis d'utiliser un seul ensemble d'informations d'identification pour administrer le blog, le forum et le wiki.
Malheureusement, cela s'est fait au détriment de la possibilité pour les utilisateurs de modifier leurs propres mots de passe.
Idéalement, les utilisateurs seraient en mesure de visiter une page (c'est-à-dire mydomain.com/account
), de s'authentifier puis de changer leur mot de passe.
Est-ce que quelqu'un connaît un script ou une application qui me permettra de le faire rapidement et facilement? J'imagine que ça ne serait pas difficile d'écrire en PHP, mais je préférerais ne pas avoir de tracas.
Sur Serverfault, Tim m'a pointé vers un script appelé phpLdapPassword .
Il a fallu environ 5 minutes pour configurer et fournit également des capacités de réinitialisation de mot de passe.
Le seul problème potentiel est que l'auteur ne le maintient plus.
Cette page semble montrer comment faire:
Une fois que vous aurez commencé à utiliser LDAP pour l’authentification, vous voudrez probablement laisser vos utilisateurs modifier leurs mots de passe. Puisqu'ils ne veulent peut-être pas/ne peuvent pas se connecter à Shell et changer leur mot de passe avec ldappasswd (1), il serait bien d'utiliser Nice.
J'ai choisi d'utiliser PHP, que j'ai compilé avec le support LDAP. En utilisant Apache avec la prise en charge de SSL, les mots de passe n’avaient pas à voyager en texte clair.
Désormais, les utilisateurs ne devraient pouvoir changer que leurs propres mots de passe, rien que le mot de passe. Cela a été réalisé avec cette strophe dans slapd.conf
access to attr=userPassword
by self write
by anonymous auth
by * none
La prochaine étape consiste alors à authentifier l'utilisateur en faisant une liaison LDAP avec ses informations d'identification:
<?php
if(isset($username) and isset($newpass) and isset($oldpass)) {
$ldapconn = ldap_connect("ldap.example.com", 389);
$ldapbind = @ldap_bind($ldapconn,"uid=".$username.",dc=example,dc=com",$oldpass);
if($ldapbind) {
// If the bind with the old password succeeds, the user has entered the right username/password combination. To change the passwd we then do:
print "<p>Change password ";
if(ldap_mod_replace ($ldapconn, "uid=".$username.",dc=example,dc=com",
array('userpassword' => "{MD5}".base64_encode(pack("H*",md5($newpass))) {
print "succeded";
}
else {
print "failed";
}
print ".</p>\n";
}
?>
Comme le site original de phpLdapPasswd est en panne et que Karyl a cessé le développement, j'ai ajouté un projet github distinct: https://github.com/koppor/phpLdapPasswd