LDAP login erstellt

This commit is contained in:
blaerf 2025-11-16 12:06:16 +01:00
parent 62b8152e16
commit 959b3b0e82
15 changed files with 158 additions and 42 deletions

86
config/ldap.php Normal file
View File

@ -0,0 +1,86 @@
<?php
// config/ldap.php
$LDAP_HOST = "ITFA-PROJ-SRV.ITFA-PROJ-DOM.local";
$LDAP_PORT = 389;
$LDAP_BASE_DN = "DC=ITFA-PROJ-DOM,DC=local";
$LDAP_UPN_SUFFIX = "@ITFA-PROJ-DOM.local";
$LDAP_NETBIOS_NAME = "ITFA-PROJ-DOM"; // falls man mal DOMAIN\user nutzen will
// einfacher Logger für LDAP
function ldap_log($message)
{
$logDir = dirname(__DIR__) . '/logs';
$logFile = $logDir . '/ldap.log';
if (!is_dir($logDir)) {
mkdir($logDir, 0770, true);
}
$line = date('c') . " [LDAP] " . $message . PHP_EOL;
// KEIN Passwort loggen!
file_put_contents($logFile, $line, FILE_APPEND);
}
/**
* LDAP-Login
* @param string $username SAM-Accountname ohne Domain
* @param string $password Klartext-Passwort (nicht loggen!)
* @param string|null $errorDetail wird mit technischem Fehlertext gefüllt
* @return resource|false LDAP-Verbindung bei Erfolg, sonst false
*/
function ldap_authenticate($username, $password, ?string &$errorDetail = null)
{
global $LDAP_HOST, $LDAP_PORT, $LDAP_UPN_SUFFIX;
$errorDetail = "";
if ($username === "" || $password === "") {
$errorDetail = "Username oder Passwort leer.";
ldap_log($errorDetail);
return false;
}
$connection = @ldap_connect($LDAP_HOST, $LDAP_PORT);
if ($connection === false) {
$errorDetail = "Verbindung zu LDAP-Host '$LDAP_HOST:$LDAP_PORT' fehlgeschlagen.";
ldap_log($errorDetail);
return false;
}
// Optionen setzen
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connection, LDAP_OPT_REFERRALS, 0);
//StartTLS
if (!@ldap_start_tls($connection)) {
$errNo = ldap_errno($connection);
$errStr = ldap_error($connection);
$errorDetail = "ldap_start_tls fehlgeschlagen (Fehler {$errNo}: {$errStr}).";
ldap_log($errorDetail);
ldap_unbind($connection);
return false;
}
// UPN-Login: user@domain
$bindRdn = $username . $LDAP_UPN_SUFFIX;
$bind = @ldap_bind($connection, $bindRdn, $password);
if ($bind === false) {
$errNo = ldap_errno($connection);
$errStr = ldap_error($connection);
$errorDetail = "Bind fehlgeschlagen für '$bindRdn' (Fehler $errNo: $errStr).";
ldap_log($errorDetail);
ldap_unbind($connection);
return false;
}
ldap_log("Login erfolgreich für '$bindRdn'.");
return $connection;
}

View File

@ -111,7 +111,7 @@
data-parent="#accordionSidebar"> data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -409,7 +409,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -110,7 +110,7 @@
data-parent="#accordionSidebar"> data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -403,7 +403,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -110,7 +110,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -578,7 +578,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -110,7 +110,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -572,7 +572,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -463,7 +463,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -49,7 +49,7 @@
id="exampleInputEmail" aria-describedby="emailHelp" id="exampleInputEmail" aria-describedby="emailHelp"
placeholder="Enter Email Address..."> placeholder="Enter Email Address...">
</div> </div>
<a href="login.html" class="btn btn-primary btn-user btn-block"> <a href="login.php" class="btn btn-primary btn-user btn-block">
Reset Password Reset Password
</a> </a>
</form> </form>
@ -58,7 +58,7 @@
<a class="small" href="register.html">Create an Account!</a> <a class="small" href="register.html">Create an Account!</a>
</div> </div>
<div class="text-center"> <div class="text-center">
<a class="small" href="login.html">Already have an account? Login!</a> <a class="small" href="login.php">Already have an account? Login!</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -731,7 +731,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,3 +1,35 @@
<?php
session_start();
require_once __DIR__ . '/../config/ldap.php';
$error = "";
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
var_dump($_POST);
$username = isset($_POST['username']) ? trim($_POST['username']) : "";
$password = isset($_POST['password']) ? $_POST['password'] : "";
$ldapConn = ldap_authenticate($username, $password);
if ($ldapConn === false) {
$error = "Anmeldung fehlgeschlagen. Benutzername oder Passwort falsch.";
} else {
// Optional: User-Infos aus AD lesen, z. B. displayName
// $result = ldap_search($ldapConn, $LDAP_BASE_DN, "(sAMAccountName=$username)", ["displayName"]);
// $entries = ldap_get_entries($ldapConn, $result);
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $username;
// $_SESSION['displayName'] = $entries[0]['displayname'][0] ?? $username;
ldap_unbind($ldapConn);
header("Location: dashboard.php");
exit();
}
}
?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
@ -41,15 +73,20 @@
<div class="text-center"> <div class="text-center">
<h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1> <h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
</div> </div>
<form class="user"> <?php if ($error !== ""): ?>
<div class="alert alert-danger" role="alert">
<?php echo htmlspecialchars($error); ?>
</div>
<?php endif; ?>
<form class="user" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div class="form-group"> <div class="form-group">
<input type="email" class="form-control form-control-user" <input type="text" name="username" class="form-control form-control-user"
id="exampleInputEmail" aria-describedby="emailHelp" id="username" aria-describedby="usernameHelp"
placeholder="Enter Email Address..."> placeholder="Enter Username...">
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="password" class="form-control form-control-user" <input type="password" name="password" class="form-control form-control-user"
id="exampleInputPassword" placeholder="Password"> id="password" placeholder="Password">
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="custom-control custom-checkbox small"> <div class="custom-control custom-checkbox small">
@ -58,16 +95,9 @@
Me</label> Me</label>
</div> </div>
</div> </div>
<a href="index.html" class="btn btn-primary btn-user btn-block"> <button type="submit" class="btn btn-primary btn-user btn-block">
Login Anmelden
</a> </button>
<hr>
<a href="index.html" class="btn btn-google btn-user btn-block">
<i class="fab fa-google fa-fw"></i> Login with Google
</a>
<a href="index.html" class="btn btn-facebook btn-user btn-block">
<i class="fab fa-facebook-f fa-fw"></i> Login with Facebook
</a>
</form> </form>
<hr> <hr>
<div class="text-center"> <div class="text-center">

View File

@ -61,7 +61,7 @@
id="exampleRepeatPassword" placeholder="Repeat Password"> id="exampleRepeatPassword" placeholder="Repeat Password">
</div> </div>
</div> </div>
<a href="login.html" class="btn btn-primary btn-user btn-block"> <a href="login.php" class="btn btn-primary btn-user btn-block">
Register Account Register Account
</a> </a>
<hr> <hr>
@ -77,7 +77,7 @@
<a class="small" href="forgot-password.html">Forgot Password?</a> <a class="small" href="forgot-password.html">Forgot Password?</a>
</div> </div>
<div class="text-center"> <div class="text-center">
<a class="small" href="login.html">Already have an account? Login!</a> <a class="small" href="login.php">Already have an account? Login!</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -112,7 +112,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -901,7 +901,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -503,7 +503,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -505,7 +505,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -491,7 +491,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -109,7 +109,7 @@
<div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar"> <div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<h6 class="collapse-header">Login Screens:</h6> <h6 class="collapse-header">Login Screens:</h6>
<a class="collapse-item" href="login.html">Login</a> <a class="collapse-item" href="login.php">Login</a>
<a class="collapse-item" href="register.html">Register</a> <a class="collapse-item" href="register.html">Register</a>
<a class="collapse-item" href="forgot-password.html">Forgot Password</a> <a class="collapse-item" href="forgot-password.html">Forgot Password</a>
<div class="collapse-divider"></div> <div class="collapse-divider"></div>
@ -485,7 +485,7 @@
<div class="modal-body">Select "Logout" below if you are ready to end your current session.</div> <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button> <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="login.html">Logout</a> <a class="btn btn-primary" href="login.php">Logout</a>
</div> </div>
</div> </div>
</div> </div>