Mon projet est de créer un système d'inscription de modules pour notre université. J'ai donc contacté les informaticiens de mon université pour plus de détails afin d'authentifier les étudiants dans le système. Nous développons le système en utilisant la connexion universitaire existante. Ils m'ont donné des informations LDAP, je n'en connais pas l'usage. J'utilise PHP, Mysql sur un serveur Apacha. Comment puis-je authentifier un utilisateur qui se connecte à mon système, compte tenu de son ID utilisateur et de son mot de passe avec les informations LDAP.
Ci-dessous, les informations LDAP (j'ai changé le nom de domaine, etc.)
Informations LDAP pour le domaine blueroom.ac.uk
LDAP Host : ad.blueroom.ac.uk
LDAP port no: 389
BASE DN : ou=bluebird, dc=bluebird, dc=ac, dc=my
LDAP account to bind : cn = kikdap, ou=servacc, dc=bluebird,dc=ac,dc=uk
LDAP account password : ********
Attribute : sAMAccountName
La procédure générale serait (les commandes php ext/ldap pertinentes entre parenthèses):
se connecter au serveur LDAP en utilisant "l'hôte LDAP" et le "numéro de port LDAP" ( ldap_connect () ) et définir les options de connexion correctes ( ldap_set_option () ), en particulier LDAP_OPT_PROTOCOL_VERSION
et LDAP_OPT_REFERRALS
se lier au serveur LDAP en utilisant le "compte LDAP à lier" et le "mot de passe du compte LDAP" ( ldap_bind () ) - si vous vous authentifiez auprès d'un serveur Active Directory, vous pouvez utiliser directement le nom d'utilisateur et le mot de passe à partir de la page de connexion et ignorez toutes les étapes suivantes.
recherchez dans l'arborescence une entrée/un objet utilisateur correspondant en spécifiant le "DN DE BASE" et le filtre LDAP approprié - probablement quelque chose comme (&(objectClass=user)(sAMAccountName=%s))
où %s
doit être remplacé par le nom d'utilisateur à authentifier ( ldap_search () )
vérifier si le nombre d'entrées retournées est 1 (si <> 1 alors quelque chose a mal tourné, par exemple aucun utilisateur trouvé ou plusieurs utilisateurs trouvés)
retrive le nom unique (DN) de cette entrée unique ( ldap_get_dn () )
utilisez le DN trouvé à la dernière étape pour essayer de vous lier au serveur LDAP avec le mot de passe donné sur la page d'authentification ( ldap_bind () )
si la liaison réussit alors tout est OK, sinon, le mot de passe est probablement incorrect
Ce n'est vraiment pas aussi difficile qu'il y paraît au premier abord. En général, je propose d'utiliser une sorte de bibliothèque standard pour l'authentification par rapport à un serveur LDAP tel que Net_LDAP2
PEAR package ou Zend_Ldap
hors du Zend Framework . Je n'ai aucune expérience de l'utilisation de Net_LDAP2
(même si je connais assez bien le code) mais Zend_Ldap
fonctionne très bien contre les serveurs Active Directory ou les serveurs ADAMS (qui est évidemment ce avec quoi vous travaillez).
Cela fera l'affaire en utilisant Zend_Ldap
:
$options = array(
'Host' => 'ad.blueroom.ac.uk',
'useStartTls' => true,
'accountDomainName' => 'blueroom.ac.uk',
'accountCanonicalForm' => 4,
'baseDn' => 'ou=bluebird,dc=bluebird,dc=ac,dc=my',
);
$ldap = new Zend_Ldap($options);
try {
$ldap->bind('user', 'password');
} catch (Zend_Ldap_Exception $e) {
// something failed - inspect $e
}
// bind successful
$acctname = $ldap->getCanonicalAccountName('user', Zend_Ldap::ACCTNAME_FORM_DN);
Vous pouvez essayer http://code.activestate.com/recipes/101525/ tout en vous référant à http://us3.php.net/ldap et à d'autres résultats d'un Recherche Google pour [authentification php ldap] .
@Stephen a fourni de bons points. Voici mon code simple PHP pour authentifier en utilisant AD:
utilisez le code suivant:
$ldap = ldap_connect($Host); // e.g. 165.5.54.6 or an URL
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap, $username.'@'.$userDomain, $passwrod);
if($bind){
// successful authentication.
}
vous pouvez utiliser http://pear.php.net/package/Net_LDAP2/docs c'est sympa et ça marche.
Exemple de connexion pris par le doc:
// Inclusion of the Net_LDAP2 package:
require_once 'Net/LDAP.php';
// The configuration array:
$config = array (
'binddn' => 'cn=admin,ou=users,dc=example,dc=org',
'bindpw' => 'password',
'basedn' => 'dc=example,dc=org',
'Host' => 'ldap.example.org'
);
// Connecting using the configuration:
$ldap = Net_LDAP2::connect($config);
// Testing for connection error
if (PEAR::isError($ldap)) {
die('Could not connect to LDAP-server: '.$ldap->getMessage());
}