Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP LDAP Login

Frage Entwicklung PHP

Mitglied: schneerunzel

schneerunzel (Level 1) - Jetzt verbinden

22.11.2014, aktualisiert 23.11.2014, 1875 Aufrufe, 11 Kommentare

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:
d4e4768b6983f388017da46298665b86 - Klicke auf das Bild, um es zu vergrößern
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.

f442c067a1bff20e9abfbb352fae174b - Klicke auf das Bild, um es zu vergrößern
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....
Mitglied: schneerunzel
22.11.2014 um 13:43 Uhr
ach ich habe Vergessen zu erwähnen: ich setzte ein Debian Server mit dem aktuellstem Apache und PHP5 (ebenfalls aktuell) ein. Der LDAP Server ist ein OpenLDAP
Bitte warten ..
Mitglied: colinardo
LÖSUNG 22.11.2014, aktualisiert 24.11.2014
Hallo Schneerunzel,
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.
01.
<?php 
02.
session_start(); 
03.
$errormessage = ''
04.
$resultmessage = ''
05.
if (isset($_POST['btnLogout'])){ 
06.
	session_unset(); 
07.
	session_destroy(); 
08.
09.
if (isset($_POST['btnLogin'])){ 
10.
	//übergebene Daten speichern 
11.
	$username = $_POST['username']; 
12.
	$password = $_POST['password']; 
13.
	 
14.
	// Daten des LDAP-Servers 
15.
	$domain = 'ou=people,dc=domain,dc=intern'
16.
	$ldap_server = '192.168.1.22'
17.
	 
18.
	//Distinguished Name des Users setzen 
19.
	$userdn = 'uid='.$username.','.$domain
20.
	 
21.
	// Mit dem LDAP-Server verbinden 
22.
	$ds = @ldap_connect($ldap_server); 
23.
	 
24.
	//Wenn Verbindung erfolgreich ... 
25.
	if ($ds){ 
26.
		//Protokollversion festlegen 
27.
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
28.
		 
29.
		//Versuche mit den übermittelten Credentials eine Verbindung 
30.
		if (@ldap_bind($ds,$userdn,$password)){ 
31.
			// Credentials OK, setze Session-Variablen 
32.
			$_SESSION['login_state'] = true; 
33.
			$_SESSION['username'] = $username
34.
		}else
35.
			// Credentials falsch 
36.
			$errormessage = "Login fehlgeschlagen!"
37.
38.
		ldap_close($ds); 
39.
	}else
40.
		echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
41.
42.
43.
 
44.
//Login war erfolgreich 
45.
if(isset($_SESSION['login_state']) && $_SESSION['login_state'] == true){ 
46.
	// wurde eine Nachricht gesendet 
47.
	if(isset($_POST['btnSendMessage']) && $_POST['data'] != ''){ 
48.
		// Schreibe die Nachricht in eine Datei 
49.
		file_put_contents("demo.txt",$_POST['data']); 
50.
		$resultmessage = "Ihre Daten wurden übertragen und gespeichert!"
51.
52.
?> 
53.
<!doctype html> 
54.
<html> 
55.
<head> 
56.
<meta charset="utf-8"
57.
<title>Willkommen</title> 
58.
</head> 
59.
<style> 
60.
body{ 
61.
	font-family:Arial, Helvetica, sans-serif; 
62.
	font-size:0.8em; 
63.
64.
</style> 
65.
<body> 
66.
<div id="login" style="width:auto;margin:0 auto;text-align:center"
67.
<h3>Herzlich Willkommen</h3> 
68.
<p>Ihr Benutzername: <strong><?php echo $_SESSION['username']; ?></strong></p> 
69.
<form name="post-data" method="post" action="ldap_login.php"
70.
<textarea name="data" style="width:300px;height:100px" onFocus="this.value='';">Ihre Nachricht</textarea><br/> 
71.
<input type="submit" name="btnLogout" id="btnLogout" value="Logout" style="width:150px"
72.
<input type="submit" name="btnSendMessage" id="btnSendMessage" value="Senden" style="width:150px"
73.
</form> 
74.
<p style="color:#0C0;font-weight:bold"><?php echo $resultmessage;?></p> 
75.
</div> 
76.
</body> 
77.
</html> 
78.
 
79.
 
80.
<?php  
81.
//LOGIN war nicht erfolgreich oder erster Aufruf der Seite (Zeige Login) 
82.
}else{  
83.
?> 
84.
 
85.
<!doctype html> 
86.
<html> 
87.
<head> 
88.
<meta charset="utf-8"
89.
<title>LDAP-Login</title> 
90.
</head> 
91.
<style> 
92.
body{ 
93.
	font-family:Arial, Helvetica, sans-serif; 
94.
	font-size:0.8em; 
95.
96.
#errormessage{ 
97.
	color:#F00;	 
98.
99.
</style> 
100.
<body> 
101.
<div id="login" style="width:320px;margin:0 auto;text-align:center"
102.
<form name="login" method="post" action="ldap_login.php"
103.
<table width="100%" border="0" cellspacing="0" cellpadding="0"
104.
  <tr> 
105.
    <td height="30" align="right">Benutzername:</td> 
106.
    <td><input name="username" type="text" style="width:150px"></td> 
107.
  </tr> 
108.
  <tr> 
109.
    <td height="30" align="right">Password:</td> 
110.
    <td><input name="password" type="password" style="width:150px"><br /> 
111.
    <span id="errormessage"><?php echo $errormessage; ?></span> 
112.
    </td> 
113.
  </tr> 
114.
  <tr> 
115.
    <td>&nbsp;</td> 
116.
    <td><input type="submit" name="btnLogin" id="btnLogin" value="Login" style="width:150px"></td> 
117.
  </tr> 
118.
</table> 
119.
</form> 
120.
</div> 
121.
</body> 
122.
</html> 
123.
<?php } ?>
Viel Erfolg
Grüße Uwe

p.s. du siehst es wird Zeit dich nun mehr mit PHP zu beschäftigen
Bitte warten ..
Mitglied: schneerunzel
23.11.2014 um 02:07 Uhr
vielen Dank für die super schnelle und ausführliche Antwort .......

leider funktioniert das ganze noch nicht so ganz.....

ich bekomme immer als Fehlermeldung "Fehler: No such object"..... Ich würde sagen das ist auf die Verschlüsselung zurückzuführen. Ich werde mir das noch mal in Ruhe ansehen und dann noch mal eine Rückmeldung geben.
Bitte warten ..
Mitglied: colinardo
23.11.2014, aktualisiert um 10:23 Uhr
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
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
Bitte warten ..
Mitglied: pantox
23.11.2014 um 11:14 Uhr
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.

01.
public function validateCredentials(UserInterface $user, array $credentials
02.
03.
    $server = 'ldap://192.168.175.123'
04.
    $domain = '@my.domain.suffix'
05.
    $username = $credentials['username']; 
06.
    $password = $credentials['password']; 
07.
  
08.
    $result = false; 
09.
  
10.
    if ($connect=@ldap_connect($server)) 
11.
12.
      ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); 
13.
      ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); 
14.
      if ($bind=@ldap_bind($connect, $username.$domain, $password)) 
15.
16.
        $result = true; 
17.
18.
19.
    ldap_close($connect); 
20.
  
21.
    return $result
22.
  }
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
Bitte warten ..
Mitglied: schneerunzel
23.11.2014, aktualisiert um 11:49 Uhr
Hallo

Hier habe ich einmal ein Export von meinem Testuser (Homer Simpson)....
01.
# Suchbereich: base 
02.
# Suchfilter: (objectClass=*) 
03.
# Anzahl Einträge: 1 
04.
05.
# Generated by LDAP Account Manager (http://www.ldap-account-manager.org) on November 23, 2014 10:10 am 
06.
# Version: 4.4 
07.
 
08.
version: 1 
09.
 
10.
# Eintrag 1: uid=homer,ou=Users,dc=ldap,dc=fritz,dc=box 
11.
dn: uid=homer,ou=Users,dc=ldap,dc=fritz,dc=box 
12.
cn: homer 
13.
description: Testbenutzer 
14.
gidnumber: 513 
15.
givenname: Homer 
16.
homedirectory: /home/homer 
17.
initials: HS 
18.
l: Springfield 
19.
loginshell: /bin/bash 
20.
objectclass: posixAccount 
21.
objectclass: inetOrgPerson 
22.
objectclass: organizationalPerson 
23.
objectclass: person 
24.
sn: Simpsons 
25.
street: 742 Evergreen Terrace 
26.
uid: homer 
27.
uidnumber: 10016 
28.
userpassword: {SSHA}z5l5/1NeKgzX9XglsHRCwTUX5zB2a1N5
Den ersten Fehler mit "No such object" habe ich gefunden. Die dn wurde vom LDAP Master nicht richtig an den LDAP Slave übergeben. Die Fehlermeldung kam aus der Zeile 49.Hat sich jetzt aber erledigt.

Wenn ich mich jetzt mit homer bekomme ich die Fehlermeldung Kennwort nicht korrekt!.

Kann das was mit der Kennwort Verschlüsselung zutun haben?

Die Zeilen in den ich den LDAP fülle sehen so aus:

01.
 //übergebene Daten speichern 
02.
        $username = $_POST['username']; 
03.
        $password = $_POST['password']; 
04.
 
05.
        // Daten des LDAP-Servers 
06.
        $domain = "ou=Users,dc=ldap,dc=fritz,dc=box"; 
07.
        $ldap_server = '192.168.159.32'; 
08.
        $ldap_user = 'cn=admin,dc=ldap,dc=fritz,dc=box'; 
09.
        $ldap_pass = '************';
(hier habe ich jetzt fest die IP des Masters eingetragen)

@Stephan: ich bin da ganz bei dir das es nicht sonderlich sicher ist das man die PWs im Quelltext eingibt. Ich würde es der Einfachheit halber aber gerne erstmal so lösen und dann wenn ich mich mehr mit PHP auseinander gesetzt habe dann umzustellen. Da ich die Lösung von Uwe mit meinem begrenzten Wissen einigermaßen verstehe (auch dank der sauberen Kommentar) würde ich mich ganz gerne zumindest am Anfang daran halten. Aber vielen Dank für deine Antwort. Ich habe deinen Link schon mal abgespeichert damit ich da später drauf zurück kommen kann. Vielen Dank.

p.s. Als LDAP Explorer nutze ich LAM
Bitte warten ..
Mitglied: colinardo
23.11.2014, aktualisiert um 19:56 Uhr
Yip liegt an der Verschlüsselung, das Hashing muss an SSHA angepasst werden.
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.
Bitte warten ..
Mitglied: colinardo
23.11.2014, aktualisiert um 19:56 Uhr
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
Bitte warten ..
Mitglied: pantox
23.11.2014 um 19:49 Uhr
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.

Griele Füße, Stephan mit ph
Bitte warten ..
Mitglied: colinardo
23.11.2014, aktualisiert um 19:58 Uhr
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

und 2. wird Stephan mit ph und
nicht mit f wie falsch geschrieben.
oh sorry, wird sofort korrigiert, Asche auf mein Haupt!

Griele Füße
dann verbrenn dir nicht die Füße auf dem Grill

Schönen Abend
Grüße Uwe
Bitte warten ..
Mitglied: schneerunzel
23.11.2014 um 20:20 Uhr
Vielen Dank hat alles super funktioniert......

Dann werde ich mich mal mit php genauer aus einander setzten....

Vielen Dank für eure Hilfe!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Windows 10
Nonstop Login im Sperrbildschirm (4)

Frage von TiCar zum Thema Windows 10 ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...