PHP LDAP Login
Hallo Zusammen,
ich brauche eine Website auf der man sich mit seinen LDAP Account anmelden kann und dann eine Nachricht eingeben kann die dann in einer .txt abgelegt wird.
Ich stelle mir das ganze so vor:
auf dieser Seite wird nur nach Benutzer und Passwort gefragt mit einem Login Butten. Mir wäre es auch recht wenn eine irgend eine andere Maske kommt. ganz egal. Wichtig ist nur das der Angegeben Benutzer auf der Späteren Seite angezeigt werden kann.
Auf dieser Seite soll der User eine Nachricht eigeben können und dadrüber soll sein Benutzername stehen mit dem er sich gerade angemeldet hat.
Die Nachricht soll dann in einer .txt auf dem Server gespeichert werden. Bei einer neuen Nachricht soll die alte überschrieben werden.
Kann mir jemand dabei helfen. Ich bin Total der PHP Leihe. Die einfachsten Sachen bekomme ich gerade so auf die Reihe.
Hintergrund zu meiner Frage:
Für ein uraltes System muss von extern ab und an mal eine "Aufgaben Key" (z.B. ich brauche eine Liste mit Lagerbeständen, dann gebe ich übers Terminal den Aufgaben Key ein und erhalte per Mail die gewünschte Liste. Die Befehle sehen ungefähr so aus: grlvw user=mmustermann key=5692) Ich würde dann die txt per Python in die entsprechenden Befehle umwandeln. Dies mach gerade da Sinn wo man z.B. nur mit einem Handy im Netz hängt oder sich mit einem Taplate nicht per SSH auf dem Server anmelden möchte.
Ich habe um das System schon viele Sonderlösungen gebaut nur mit dem Aufgaben Keys komme ich nicht weiter.
Vielen Dank für eure Hilfe....
ich brauche eine Website auf der man sich mit seinen LDAP Account anmelden kann und dann eine Nachricht eingeben kann die dann in einer .txt abgelegt wird.
Ich stelle mir das ganze so vor:
auf dieser Seite wird nur nach Benutzer und Passwort gefragt mit einem Login Butten. Mir wäre es auch recht wenn eine irgend eine andere Maske kommt. ganz egal. Wichtig ist nur das der Angegeben Benutzer auf der Späteren Seite angezeigt werden kann.
Auf dieser Seite soll der User eine Nachricht eigeben können und dadrüber soll sein Benutzername stehen mit dem er sich gerade angemeldet hat.
Die Nachricht soll dann in einer .txt auf dem Server gespeichert werden. Bei einer neuen Nachricht soll die alte überschrieben werden.
Kann mir jemand dabei helfen. Ich bin Total der PHP Leihe. Die einfachsten Sachen bekomme ich gerade so auf die Reihe.
Hintergrund zu meiner Frage:
Für ein uraltes System muss von extern ab und an mal eine "Aufgaben Key" (z.B. ich brauche eine Liste mit Lagerbeständen, dann gebe ich übers Terminal den Aufgaben Key ein und erhalte per Mail die gewünschte Liste. Die Befehle sehen ungefähr so aus: grlvw user=mmustermann key=5692) Ich würde dann die txt per Python in die entsprechenden Befehle umwandeln. Dies mach gerade da Sinn wo man z.B. nur mit einem Handy im Netz hängt oder sich mit einem Taplate nicht per SSH auf dem Server anmelden möchte.
Ich habe um das System schon viele Sonderlösungen gebaut nur mit dem Aufgaben Keys komme ich nicht weiter.
Vielen Dank für eure Hilfe....
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 255639
Url: https://administrator.de/forum/php-ldap-login-255639.html
Ausgedruckt am: 29.04.2025 um 05:04 Uhr
11 Kommentare
Neuester Kommentar
Hallo Schneerunzel,

Hier mal ein Beispiel:
Wichtiger Hinweis: Wurde nur mal testweise mit einem OpenLDAP-Server auf einem Qnap-NAS getestet.
Benenne das File ldap_login.php und passe die Daten deines LDAP-Servers in Zeile 15-16 an. In Zeile 49 dann noch den Pfad zur Textdatei anpassen die erstellt wird.
WICHTIG: Auf deinem Apache-Server musst du in der php.ini noch die LDAP-Erweiterungen aktivieren und dort die Zeile
auskommentieren.
Viel Erfolg
Grüße Uwe
p.s. du siehst es wird Zeit dich nun mehr mit PHP zu beschäftigen
Kann mir jemand dabei helfen. Ich bin Total der PHP Leihe. Die einfachsten Sachen bekomme ich gerade so auf die Reihe.
OK, dann hast du dir gleich mal was "einfaches" rausgesucht Hier mal ein Beispiel:
Wichtiger Hinweis: Wurde nur mal testweise mit einem OpenLDAP-Server auf einem Qnap-NAS getestet.
Benenne das File ldap_login.php und passe die Daten deines LDAP-Servers in Zeile 15-16 an. In Zeile 49 dann noch den Pfad zur Textdatei anpassen die erstellt wird.
WICHTIG: Auf deinem Apache-Server musst du in der php.ini noch die LDAP-Erweiterungen aktivieren und dort die Zeile
extension=php_ldap.dll
auskommentieren.
<?php
session_start();
$errormessage = '';
$resultmessage = '';
if (isset($_POST['btnLogout'])){
session_unset();
session_destroy();
}
if (isset($_POST['btnLogin'])){
//übergebene Daten speichern
$username = $_POST['username'];
$password = $_POST['password'];
// Daten des LDAP-Servers
$domain = 'ou=people,dc=domain,dc=intern';
$ldap_server = '192.168.1.22';
//Distinguished Name des Users setzen
$userdn = 'uid='.$username.','.$domain;
// Mit dem LDAP-Server verbinden
$ds = @ldap_connect($ldap_server);
//Wenn Verbindung erfolgreich ...
if ($ds){
//Protokollversion festlegen
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
//Versuche mit den übermittelten Credentials eine Verbindung
if (@ldap_bind($ds,$userdn,$password)){
// Credentials OK, setze Session-Variablen
$_SESSION['login_state'] = true;
$_SESSION['username'] = $username;
}else{
// Credentials falsch
$errormessage = "Login fehlgeschlagen!";
}
ldap_close($ds);
}else{
echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds);
}
}
//Login war erfolgreich
if(isset($_SESSION['login_state']) && $_SESSION['login_state'] == true){
// wurde eine Nachricht gesendet
if(isset($_POST['btnSendMessage']) && $_POST['data'] != ''){
// Schreibe die Nachricht in eine Datei
file_put_contents("demo.txt",$_POST['data']);
$resultmessage = "Ihre Daten wurden übertragen und gespeichert!";
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Willkommen</title>
</head>
<style>
body{
font-family:Arial, Helvetica, sans-serif;
font-size:0.8em;
}
</style>
<body>
<div id="login" style="width:auto;margin:0 auto;text-align:center">
<h3>Herzlich Willkommen</h3>
<p>Ihr Benutzername: <strong><?php echo $_SESSION['username']; ?></strong></p>
<form name="post-data" method="post" action="ldap_login.php">
<textarea name="data" style="width:300px;height:100px" onFocus="this.value='';">Ihre Nachricht</textarea><br/>
<input type="submit" name="btnLogout" id="btnLogout" value="Logout" style="width:150px">
<input type="submit" name="btnSendMessage" id="btnSendMessage" value="Senden" style="width:150px">
</form>
<p style="color:#0C0;font-weight:bold"><?php echo $resultmessage;?></p>
</div>
</body>
</html>
<?php
//LOGIN war nicht erfolgreich oder erster Aufruf der Seite (Zeige Login)
}else{
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>LDAP-Login</title>
</head>
<style>
body{
font-family:Arial, Helvetica, sans-serif;
font-size:0.8em;
}
#errormessage{
color:#F00;
}
</style>
<body>
<div id="login" style="width:320px;margin:0 auto;text-align:center">
<form name="login" method="post" action="ldap_login.php">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="30" align="right">Benutzername:</td>
<td><input name="username" type="text" style="width:150px"></td>
</tr>
<tr>
<td height="30" align="right">Password:</td>
<td><input name="password" type="password" style="width:150px"><br />
<span id="errormessage"><?php echo $errormessage; ?></span>
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="btnLogin" id="btnLogin" value="Login" style="width:150px"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
<?php } ?>
Viel Erfolg
Grüße Uwe
p.s. du siehst es wird Zeit dich nun mehr mit PHP zu beschäftigen
das könnte mehrere Ursachen haben, entweder der DN des Admin-Accounts des LDAP ist falsch, oder der DN des gesuchten Users. Ich gehe im Script davon aus das der User in der selben Ebene(OU) die du in Zeile 15 angibst liegt. Der DN wird in Zeile 40 zusammengesetzt. Auf dem Qnap war hier ein uid= Prefix nötig, eventuell liegt da der Hase im Pfeffer.
Jeder LDAP hat da so seine Eigenheiten, da muss man halt etwas testen. Aber ein Grundgerüst hast du damit ja schon mal.
Wäre gut wenn du mal die Zeile nennen könntest in der der Fehler geworfen wird.
Ansonsten mit
am Anfang der Seite die ausführlichen PHP Errormessages einschalten
Unabdingbar fürs Debugging ist auf jeden Fall ein LDAP-Explorer wie z.B. JXplorer oder LDAPAdmin, welchen du dir mit ins Boot holen solltest.
Grüße Uwe
Jeder LDAP hat da so seine Eigenheiten, da muss man halt etwas testen. Aber ein Grundgerüst hast du damit ja schon mal.
Wäre gut wenn du mal die Zeile nennen könntest in der der Fehler geworfen wird.
Ansonsten mit
error_reporting(E_ALL);
am Anfang der Seite die ausführlichen PHP Errormessages einschalten
Unabdingbar fürs Debugging ist auf jeden Fall ein LDAP-Explorer wie z.B. JXplorer oder LDAPAdmin, welchen du dir mit ins Boot holen solltest.
Grüße Uwe
Hallo Zusammen,
ich finde es grundsätzlich nicht gut, Passwörter im Quelltext einzubauen und besonders bei denen von Administratoren habe ich mehr als Bauchschmerzen.
Beim Thema LDAP Authentifizierung sollte jeder Benutzer im Verzeichnis in der Lage sein eine ganz wichtige Sache machen zu können, die Selbstauthentifizierung. Also kurz deine Idee aufgegriffen, Verbindung zum Server aufbauen und dann ein bind mit den vom Nutzer eingegebenen Daten versuchen, schlägt dieser fehlt ist entweder der Benutzer unbekannt oder das Passwort falsch.
Das Codebeispiel ist aus einer Laravel-Anmeldung herrausgerissen (der ganze Beitrag), aber genau diese paar Zeilen ermöglichen die Authentifizierung eines Nutzers. Wie oben gefordert ist der Benutzername ja schon bekannt.
Gruß, Stephan
ich finde es grundsätzlich nicht gut, Passwörter im Quelltext einzubauen und besonders bei denen von Administratoren habe ich mehr als Bauchschmerzen.
Beim Thema LDAP Authentifizierung sollte jeder Benutzer im Verzeichnis in der Lage sein eine ganz wichtige Sache machen zu können, die Selbstauthentifizierung. Also kurz deine Idee aufgegriffen, Verbindung zum Server aufbauen und dann ein bind mit den vom Nutzer eingegebenen Daten versuchen, schlägt dieser fehlt ist entweder der Benutzer unbekannt oder das Passwort falsch.
public function validateCredentials(UserInterface $user, array $credentials)
{
$server = 'ldap://192.168.175.123';
$domain = '@my.domain.suffix';
$username = $credentials['username'];
$password = $credentials['password'];
$result = false;
if ($connect=@ldap_connect($server))
{
ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
if ($bind=@ldap_bind($connect, $username.$domain, $password))
{
$result = true;
}
}
ldap_close($connect);
return $result;
}
Das Codebeispiel ist aus einer Laravel-Anmeldung herrausgerissen (der ganze Beitrag), aber genau diese paar Zeilen ermöglichen die Authentifizierung eines Nutzers. Wie oben gefordert ist der Benutzername ja schon bekannt.
Gruß, Stephan
Yip liegt an der Verschlüsselung, das Hashing muss an SSHA angepasst werden.

P.s. Die Methode von Stephan ist natürlich schöner, hatte mit LDAP noch nicht so viel am Hut deshalb deshalb mein etwas umständlicher Umweg.
userpassword: {SSHA}z5l5/1NeKgzX9XglsHRCwTUX5zB2a1N5
Melde mich dazu nochmal, muss ich erst testen P.s. Die Methode von Stephan ist natürlich schöner, hatte mit LDAP noch nicht so viel am Hut deshalb deshalb mein etwas umständlicher Umweg.
So, Code wurde entsprechend angepasst, nach der vorgeschlagenen Methode von Stephan, war ja eigentlich auch naheliegend, aber manchmal sieht man den Wald vor lauter Bäumen nicht, wenn man tausend Sachen gleichzeitig macht, wie ich im Moment
.
Es muss nun nur noch der DN in dem die User liegen und die Server-IP angepasst werden (Zeilen 16,17).
Grüße Uwe
Es muss nun nur noch der DN in dem die User liegen und die Server-IP angepasst werden (Zeilen 16,17).
Grüße Uwe
Zitat von @pantox:
Jetzt hab ich nur noch zwei Kleinigkeiten: 1. Zeile 22 und 25 können zusammengefasst werden
gut, das ändert jetzt aber nicht die Funktionsweise, macht halt jeder etwas anders Jetzt hab ich nur noch zwei Kleinigkeiten: 1. Zeile 22 und 25 können zusammengefasst werden
und 2. wird Stephan mit ph und
nicht mit f wie falsch geschrieben.
oh sorry, wird sofort korrigiert, Asche auf mein Haupt!nicht mit f wie falsch geschrieben.
Griele Füße
dann verbrenn dir nicht die Füße auf dem Grill Schönen Abend
Grüße Uwe