LDAP-Login an AD vom Internet aus mittels PHP-Script
Ich möchte eine LDAP-gestützte Login-Möglichkeit schaffen, die es Usern erlaubt, sich über eine Website über das Netzwerk für Inhalte zu authentifizieren. Diese Inhalte stammen nicht aus dem AD, sondern vom Webserver selbst.
Hallo zusammen,
wie oben beschrieben, bin ich gerade dabei, ein PHP-Script zu erstellen, welches mit eine Authentifizierung per LDAP in meinem AD ermöglicht. Dazu habe ich viele Seiten im Internet durchsucht, und hier im Forum schon einen Beitrag gefunden, welcher ein Script enthielt, welches für den Anfang genau das Richtige war.
Anleitung: PHP Loginscript für (LDAP) Activedirectory Benutzer
Ich habe das Script angepasst, sodass es für meine Bedürfnisse optimiert ist.
Dabei ist Folgendes herausgekommen:
Rufe ich die Funktion nun auf, indem ich ein Formular nutze, so erhalte ich folgende Fehlermeldung:
Wie zu erwarte, befindet sich in Zeile 36 der Funktionsaufruf von ldap_bind().
An dem Benutzer im AD kann es nicht liegen. Ich habe es sogar mit einem Domänen-Admin ausprobiert. Im Router habe ich auch alle Ports geöffnet, und auf den DC geleitet.
Nun meine Fragen:
Ich danke Euch für Eure Antworten und wünsche einen schönen Abend.
tbnwadm
Hallo zusammen,
wie oben beschrieben, bin ich gerade dabei, ein PHP-Script zu erstellen, welches mit eine Authentifizierung per LDAP in meinem AD ermöglicht. Dazu habe ich viele Seiten im Internet durchsucht, und hier im Forum schon einen Beitrag gefunden, welcher ein Script enthielt, welches für den Anfang genau das Richtige war.
Anleitung: PHP Loginscript für (LDAP) Activedirectory Benutzer
Ich habe das Script angepasst, sodass es für meine Bedürfnisse optimiert ist.
Dabei ist Folgendes herausgekommen:
<?php
function ldap_login($server){
if((isset($_COOKIE["cookie_username"]) AND ($_COOKIE["cookie_password"]))){
$username = $_COOKIE["cookie_username"] ;
$password = $_COOKIE["cookie_password"] ;
$check_positive = 1 ;
}
else{
if((isset($_POST["username"]) OR ($_POST["password"]))){
if(empty($_POST["username"]) OR empty($_POST["password"])){
$array["login_complete"] = "Bitte füllen Sie alle Felder aus !" ;
}
else{
if((isset($_POST["username"]) AND ($_POST["password"]))){
$username = $_POST["username"] ;
$password = $_POST["password"] ;
$check_positive = 1 ;
}
}
}
else{
$array["login_complete"] = "Sie sind nicht eingeloggt !" ;
}
}
if($check_positive == 1){
if(!($connection = ldap_connect($server))){
$array["login_complete"] = "Verbindung zum Server konnte nicht hergestellt werden !" ;
}
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3) ;
ldap_set_option($connection, LDAP_OPT_REFERRALS, 0) ;
if(!($bind = ldap_bind($connection, $username, $password))){
$array["login_complete"] = "Login fehlgeschlagen !" ;
}
else{
setcookie("cookie_username", $username, time()+(60*60)) ;
setcookie("cookie_password", $password, time()+(60*60)) ;
$array["login_check"] = true ;
}
}
$array["username"] = $username ;
$array["password"] = $password ;
$array["connection"] = $connection ;
return $array ;
}
?>
Rufe ich die Funktion nun auf, indem ich ein Formular nutze, so erhalte ich folgende Fehlermeldung:
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Invalid credentials in <entfernt> on line 36
Wie zu erwarte, befindet sich in Zeile 36 der Funktionsaufruf von ldap_bind().
An dem Benutzer im AD kann es nicht liegen. Ich habe es sogar mit einem Domänen-Admin ausprobiert. Im Router habe ich auch alle Ports geöffnet, und auf den DC geleitet.
Nun meine Fragen:
- Reicht ein "normales" AD auf dem DC aus, oder muss ich auch die Rolle "AD LDS" installieren? Geht das nachträglich überhaupt noch, ohne sich die Domäne zu zerschießen?
- Ist das Script fehlerhaft, und deshalb kommt keine Bindung zustande?
- Welche Rechte benötigt der Benutzer, der sich spätereinloggen will, bzw. welchen Gruppen im AD muss er angehören?
Ich danke Euch für Eure Antworten und wünsche einen schönen Abend.
tbnwadm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178196
Url: https://administrator.de/forum/ldap-login-an-ad-vom-internet-aus-mittels-php-script-178196.html
Ausgedruckt am: 29.04.2025 um 06:04 Uhr
11 Kommentare
Neuester Kommentar
Dabei ist Folgendes herausgekommen:
Also von der Code-Qualität bekomme ich Kopfschmerzen, aber gut...
Invalid credentials
Lass mich mal raten...
Du hast als Benutzername sowas wie "benutzer" als Username eingegeben?
Das funktioniert genau...niemals.
Weil Microsoft aber so nett ist haben sie eine alternative erlaubt:
"domain\benutzer" oder "benutzer@domain.name"
geht.
Aber auch das ist falsch!
Die korrekte Methode sich bei LDAP zu authentifzieren ist einzig mit dem DN des Objekts.
Und den erhält man (und so macht es auch Windows selbst) indem man sich zuerst mit dem eigenen Dienstkonto an LDAP anmeldet und dann über "(sAMAccountName=...)" nach dem Benutzerobjekt sucht.
Wenn das Ergebnis eindeutig ist benutzt man den erhaltenen DN und das Passwort des Benutzers für die Bindung.
Hi!
schau dir mal adLDAP an:
http://adldap.sourceforge.net/
ist ganz praktisch.
hast schon mal die "ldap_set_option" weggelassen?
sg Dirm
schau dir mal adLDAP an:
http://adldap.sourceforge.net/
ist ganz praktisch.
hast schon mal die "ldap_set_option" weggelassen?
sg Dirm