Authentification LDAP + groupes sur Wifi

This commit is contained in:
root 2017-01-23 14:35:24 +01:00
parent f2a9680f89
commit 7310f8d976
3 changed files with 105 additions and 0 deletions

View File

@ -0,0 +1,28 @@
<?php
// Formulaire d'authentification LDAP
include_once('winlog_admin_conf.php');
// on sort immédiatement si login.php est appelé sans les paramètres attendus
if ($auth_mode !="LDAP") {
header('Location: interdit.php');
exit();
}
include_once('ldap_conf.php');
?>
<!DOCTYPE HTML>
<html lang="fr">
<head>
<title>Winlog</title>
<meta charset="utf-8">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
</head>
<body>
<p class="header">WINLOG</p>
<p style="text-align: center"><?php echo($auth_ldap_message); ?>
<form id="login" name="login" action="login_ldap.php" method="POST">
<div class="login"><label for="username">Compte : </label><input type="text" id⁼"username" name="username" /></div>
<div class = "login"><label for="password">Mot de passe : </label><input type="password" id="password" name="password" /></div>
<button type="submit" class ="bouton_valide">Valider</button>
</form>
<p class="footer">version <?php echo($winlog_version); ?></p>
</body>
</html>

View File

@ -0,0 +1,13 @@
<?php
// configuration de l'authentificition LDAP
// Attention : si connexion en ldaps, vérifier la présence du certificat du serveur LDAP
// ou forcer la non vérification du certificat : TLS_REQCERT never dans /etc/ldap/ldap.conf
$auth_ldap_server = "ldaps://ip_serveur_ldap"; // IP ou nom d'hôte du serveur LDAP
$auth_ldap_user = "CN=reader,CN=Users,DC=iut,DC=local"; // DN d'un compte autorisé en lecture sur l'annuaire
$auth_ldap_pass = "Maude Passe"; // mot de passe de ce compte
$auth_ldap_basedn = "DC=iut,DC=local"; // DN : base de recherche des comptes
$auth_ldap_port = "636"; // port du serveur : 636 (ldaps) recommandé
$auth_ldap_attribut_identifier = "sAMAccountName"; // attribut identifiant d'un compte dans l'annuaire
$auth_ldap_AD = true; // le serveur LDAP est-il un serveur AD ?
$auth_ldap_message = "Veuillez vous authentifier avec votre compte et votre mode passe Windows"; // message sur le formulaire d'authentification LDAP
?>

64
admin/login_ldap.php Normal file
View File

@ -0,0 +1,64 @@
<?php
// Formulaire d'authentification LDAP
include_once('winlog_admin_conf.php');
// on sort immédiatement si login_ldap.php est appelé hors du auth_mode LDAP
if ($auth_mode !="LDAP") {
header('Location: interdit.php');
exit();
}
$username = $_POST['username'];
$password = $_POST['password'];
include_once('ldap_conf.php');
// Connexion au serveur LDAP
$ldapconn = ldap_connect($auth_ldap_server, $auth_ldap_port) or die("Connexion au serveur LDAP impossible.");
if ($auth_ldap_AD) {
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0); // option nécessaire pour une recherche depuis la racine du domaine
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); // option nécessaire pour une recherche sur AD
}
if($ldapconn) {
// authentification avec le compte $auth_ldapuser
$ldapbind = ldap_bind($ldapconn, $auth_ldap_user, $auth_ldap_pass) or die ("Erreur LDAP sur bind initial: ".ldap_error($ldapconn));
if ($ldapbind) {
$s2 = false;
$dn = false;
$srl = false;
$entry = false;
// recherche du DN de l'utilisateur $username dans l'annuaire
$filtre = "($auth_ldap_attribut_identifier=$username)";
$srl = ldap_search($ldapconn , $auth_ldap_basedn , $filtre, ["dn"]);
if ($srl) {
$entry = ldap_first_entry($ldapconn , $srl);
if ($entry) {
$dn = ldap_get_dn($ldapconn , $entry);
}
}
// tentative d'authentification de l'utilisateur $username sur l'annuaire
if ($dn) {
$s2 = ldap_bind($ldapconn, $dn, $password);
}
if (($s2) && ($password != "") && ($dn != ""))
{
session_start();
$_SESSION['username'] = $username;
header('Location: '.$winlog_url);
exit();
}
}
}
?>
<!DOCTYPE HTML>
<html lang="fr">
<head>
<title>Winlog</title>
<meta charset="utf-8">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
</head>
<body>
<p class="header">WINLOG</p>
<p>Compte ou mot de passe inconnu</p>
<br/><br/><a href="index.php"><i>Menu principal</i></a>
<p class="footer">version <?php echo($winlog_version); ?></p>
</body>
</html>