Top-Themen

Aktuelle Themen (A bis Z)

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

PHP Loginscript für (LDAP) Activedirectory Benutzer

Anleitung Entwicklung PHP

Mitglied: LordMDG

LordMDG (Level 1) - Jetzt verbinden

07.05.2006, aktualisiert 23.05.2008, 48694 Aufrufe, 16 Kommentare, 2 Danke

Mit PHP prüfen, ob Passwort und Benutzer mit Activedirectory übereinstimmen mit Hilfe von LDAP.

Moin!

Nach dem ich nun 3 Tage und Nächte das gesamt Internet durchwühlt habe um ein Loginscript für PHP zu schreiben, der Benutzer das eingegeben Passwort mit dem Activedirectory von WIN2k überprüft, habe ich mir gedacht das es sinnvoll sein kann, es hier zu posten.

Es ist eine einfache Funktion die true zurück gibt, wenn name und Passwort übereinstimmen und False, wenn nicht.

Mit $username und $passwort werden die Daten angegeben, die überprüft werden sollen.
[Dein Server] ist der Servername
[sitename] ist die Domäne, wie hier Administrator
[sitesuffix] ist die TDL wie DE oder local

01.
<?> 
02.
function checkNTUser ($username,$passwort
03.
04.
   $ldapserver = '[Dein Server]'; 
05.
   $ds=ldap_connect($ldapserver); 
06.
   if ($ds
07.
08.
      $dn="cn=$username,cn=Users, DC=[sitename], DC=[sitesuffix]"
09.
      $r=@ldap_bind($ds,$dn,$passwort);  
10.
       if ($r
11.
12.
          return true; 
13.
14.
       else 
15.
16.
          return false; 
17.
18.
19.
 }</?>
Ich hoffe, jemanden damit weitergeholfen zu haben.
Mitglied: iamnils
08.05.2006 um 08:40 Uhr
Hallo Michael,

ich glaube, dass ich schon eine Anwendung für dieses Script habe. Gibt es eigentlich auch eine Möglichkeit, neue User über ein PHP-Script bei Windows anzulegen? Mit allen Feldern (z.B. auch Telefon usw.)?

mfg Nils
Bitte warten ..
Mitglied: Dambi
08.05.2006 um 10:55 Uhr
Hallo

Ich wollte das einmal ausprobieren, doch es ging nicht! Was muss unter SuSE alles installiert sein, damit ich diese LDAP Abfrage machen kann?? ich habe die php extension php_ldap installiert. muss ich noch ein LDAP connector haben oder so?


Gruss Dambi
Bitte warten ..
Mitglied: LordMDG
08.05.2006 um 14:03 Uhr
Also ich weiß, das unter Linux die LDAP-Bibliothek extra mti kompiliert werden muß, wie das unter Suse aussieht weiß ich nicht.
Aber das Scirpt funktioniert auch nur bei dem Windows Active Directory, für Linx mit samba oder so, sehen die Befehlen wieder ganz anders aus.
Bitte warten ..
Mitglied: LordMDG
08.05.2006 um 14:06 Uhr
Generell kann man über LDAP eigentlich alles einstellen osgar Exchange sachen usw., aber ich habe bis jetzt für Windows noch keine einzige ordentliche Anleitung gefunden. Die beziehn sich immer auf Linux.

Diese Script hin zu bekommen, hat mich auch so viel Zeit gekostet, das ich keine Lust mehr habe und eigentlich die Funktion auch reicht.
Solltest du aber irgendwas interressantes finden, würde ich mich freuen davon zu hören.
Bitte warten ..
Mitglied: n.o.b.o.d.y
08.05.2006 um 18:20 Uhr
Moin,

dann werd ich mal versuchen unserem Squid beizubringen sich gegnüber dem AD zu authentifizieren... mal sehen ob das geht....

Vielen Dank für das Skript!

Ralf
Bitte warten ..
Mitglied: scout
09.05.2006 um 08:38 Uhr
Gibt es auch eine Möglichkeit eine Gruppenzugehörigkeit zu prüfen?
Bitte warten ..
Mitglied: LordMDG
09.05.2006 um 10:01 Uhr
Moit folgendem Befehl kann man vergleiche in der LDAP-Datenbank anstellen:
bool ldap_compare ( resource Verbindungs-Kennung, string dn, string merkmal, string wert )
Ist auch einigermaßen in der PHP manual beschrieben.
Allerdings müßte man dabei wissen wie das Feld Benutzergruppe im AD heißt.
Bitte warten ..
Mitglied: scout
09.05.2006 um 21:40 Uhr
Du meinst, ich kann vergleiche wie diesen hier damit machen?

if ($EinloggenderUser Mitlgied von "Administratoren")


solange ich weiß das die Gruppe Administratoren heißt?
Bitte warten ..
Mitglied: LordMDG
09.05.2006 um 23:53 Uhr
Quasi ja, aber es ging mir nicht um den Gruppennamen wie Administrator oder so, sondern ich weiß nicht, wie gruppen im LDAP genannt werden, ob jetzt groups oder gruppen oder benutzergruppen oder usergroups und finde dazu auch nirgends informationen. Wenn man das weiß, brauch man nur noch das script noch leicht umändern.
Bitte warten ..
Mitglied: iamnils
14.05.2006 um 18:00 Uhr
Hallo zusammen,

so, ich habe rausgefunden, wie man sich das AD-Schema anzeigen lassen kann (mit allen Feldern).

#1 ResourceKit downloaden
http://www.microsoft.com/downloads/details.aspx?displaylang=en&fami ...

#2 RKTools installieren

#3 schmmgmt.dll registrieren
regsvr32 schmmgmt.dll

#4 Start -> Ausführen
mmc /a

#5 Datei -> Snap-In Hinzufügen
"Active Directory Schema" hinzufügen

#6 Speichern unter %systemroot%system32
schmmgmt.msc

Hier kann man sich das AD komplett anschauen, alle Felder...

mfg Nils
Bitte warten ..
Mitglied: Lousek
29.01.2008 um 23:58 Uhr
Hallo.

Ich habe das ganze noch ein bisschen erweitert:

01.
function login_complete ($ldap_server) 
02.
03.
      if((isset($_COOKIE['cookie_username']) AND ($_COOKIE['cookie_passwort']))) { 
04.
                $username = $_COOKIE['cookie_username']; 
05.
                $passwort = $_COOKIE['cookie_passwort']; 
06.
                $check_positive = 1; 
07.
      } else { 
08.
               if((isset($_POST['username']) OR ($_POST['passwort']))) { 
09.
                         if(empty($_POST['username']) OR empty($_POST['passwort'])) { 
10.
                                  $array["login_complete"] = "Bitte fuellen Sie alle Felder aus. <br>"; 
11.
                         } else {                              
12.
                                  if((isset($_POST['username']) AND ($_POST['passwort']))) { 
13.
                                            $username = $_POST['username']; 
14.
                                            $passwort = $_POST['passwort']; 
15.
                                            $check_positive = 1; 
16.
                                  }  
17.
18.
                } else { 
19.
                          $array["login_complete"] = "Sie sind nicht eingeloggt: ";       
20.
21.
22.
 
23.
 
24.
       
25.
            if($check_positive==1) { 
26.
      //----------------------------------------Login und Bind----------------------------------------       
27.
      if (!($connect=@ldap_connect($ldap_server))) { 
28.
            $array["login_complete"] = "Could not connect to ldap server<br>"; 
29.
      } else { 
30.
31.
       
32.
      // Needed for W2003 AD.. 
33.
      ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); 
34.
      ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); 
35.
       
36.
      if (!($bind=@ldap_bind($connect, $username, $passwort))) { 
37.
            $array["login_complete"] = "Login oder Passwort falsch. <br>"; 
38.
      } else { 
39.
            setcookie("cookie_passwort", $passwort, time()+(60*60)); 
40.
            setcookie("cookie_username", $username, time()+(60*60)); 
41.
            $array["login_check"] = true; 
42.
      }          
43.
44.
            $array["username"] = $username; 
45.
            $array["passwort"] = $passwort; 
46.
            $array["connect"] = $connect; 
47.
            return $array; 
48.
}      
Die Funktion gibt ein Array zurück, mit dem Benutzernamen, Passwort, Der Connect-Meldung und ob das login erfolgreich war (oder die Fehldermeldungen).

In den übrigen Dokumenten frage ich dann einfach immer nur noch das ab:

01.
 
02.
include "variables.php"; 
03.
include "functions.php"; 
04.
 
05.
$login = login_complete ($ldap_server); 
06.
$login_complete = $login["login_complete"]; 
07.
$username = $login["username"]; 
08.
$passwort = $login["passwort"]; 
09.
$login_check = $login["login_check"]; 
10.
$connect = $login["connect"]; 
11.
 
Die Bereiche, die nur eingeloggt angezeigt werden dürfen, kommen in folgendes:

01.
echo $login_complete; 
02.
if($login_check==true) { 
03.
echo "     Sie sind eingeloggt als: ".$username; 
04.
} else { 
05.
echo "<form action='$file' method='POST'>"; 
06.
echo "Benutzername:<br>"; 
07.
echo "<input type='text' value='Benutzername' name='username'><br>"; 
08.
echo "Passwort:<br>"; 
09.
echo "<input type='password' name='passwort'><br>"; 
10.
echo "<input type='submit' value='login' name='submit'<br>"; 
11.
}
Das echo $login_complete gibt die Meldung zurück (also z.B. Sie sind nicht eingeloggt o.ä.)

Der Inhalt, der nur eingeloggt angezeigt werden kann, ist im THEN-teil (oberer Teil), also hier kommt dann: "Sie sind eingeloggt als Muster.Hans"
(Eingeloggt = login erfolgreich)

Der Teil der nur bei nicht eingeloggtem Status angezeigt werden soll ist im ELSE-teil
(Hier kommt das Login)
Wenn man auf "Login" klickt (Formular absenden) kehrt man wieder auf dieselbe Seite zurück (mithilfe der Variable $file, schreibe zu der später noch einen Kommentar dazu )

Dieser Codeblock (if($login_check==true) {} else {}) kann man überall einbinden wo man will (ausser natürlich vor dem Aufrufen der Funktion), also kann man z.B. in der Navi bestimmte Punkte ausblenden / einblenden und gleichzeitig auch beim Inhalt etwas verbieten.

Das echo $login_complete würde ich auch immer gerade dazuschreiben, da man sonst nicht weiss ob man nicht alle Felder ausgefüllt hat, oder ob man das Passwort falsch eingegeben hat, oder ob man nicht eingeloggt ist. Sonst weiss man am Schluss nicht mal das es noch mehr Inhalte hat, einfach erst nach dem einloggen =).



--Bei Verbersserungsvorschlägen, einfach melden--

Greetz, Lousek
Bitte warten ..
Mitglied: Simonvetterli
23.05.2008 um 07:25 Uhr
Hallo Lousek Greetz

Gäbe es die Möglichkeit, mir das ganze als Beispiel zum downloaden anzubieten? Alle Files in einem ZIP?

Genau so etwas suche ich gerade... welches dann auch funktioniert.

Gruss Simon
Bitte warten ..
Mitglied: Lousek
23.05.2008 um 13:35 Uhr
Moinsen Simon

Habe es hier hochgeladen: http://hubusoft.5x.to/login.rar

Hat noch ein paar unnötige Dinge drinn, hatte nur mal etwas daran rumgebastelt, nie produktiv gebraucht ... bei mir ging es so ...

Irgendwo sollte ich noch eine Datei haben, die die Gruppenangehörigkeit überprüft ... werde die noch schnell suchen.

Greetz, Lousek

Edit: Die datei memberof.php stammt nicht vonmir, von der hab ich das ganze mit der Gruppenangehörigkeit "abgeschaut". In der marken.php habe ich einfach ein bisschen rumgebastelt ...
Bitte warten ..
Mitglied: LordISP
03.05.2009 um 17:05 Uhr
Zitat von Lousek:
Habe es hier hochgeladen: http://hubusoft.5x.to/login.rar

Bei so etwas muss ich immer wieder schmunzeln...

So ein LDAP Login ist jetzt nicht die große Herausforderung, was allerdings schon öfters gefragt wurde und nie wirklich beantwortet wurde:

Wie muss der LDAP-Filter aufgebaut sein um eine spezifische Gruppenmitgliedschaft prüfen zu können.
Eigentlich eine einfache Frage.

Quasi: ist [username] memberof [Administratoren] dann hätt ich gern ein true (oder was weis ich…)

Bin schon mal auf eure Kommentare gespannt…

Gruß
Rafael
Bitte warten ..
Mitglied: Lousek
03.05.2009 um 19:44 Uhr
Hallo.

Habe vor einiger Zeit ein Script geschrieben, dass alle User in einer Gruppe (und allen Untergruppen --> rekursiv) auflistet.
Werde morgen mal nachschauen, habe das Script nicht zu Hause und mein Hirn ist etwas eingerostet was LDAP angeht.

Grundsätzlich kannst du aber die Mitglieder eine Gruppe auslesen.
Dann könntest du diese ja selbst (also nicht direkt mit LDAP) mit deinem gewünschten Benutzer vergleichen.

Wenn du den ganzen DN (LDAP-Pfad) des Users hast (z.B. durch das Login), dann kannst du nachher diesen mit allen bekommenen Einträgen aus der "Gruppenmitgliedschafts"-Abfrage vergleichen ...
Sonst müsstest du evt. noch den DN herausfinden des Users, sprich im AD nach dem User suchen.

Greetz, Lousek
Bitte warten ..
Mitglied: dscheff
29.09.2011 um 17:22 Uhr
Hallo Lousek,
kannst Du das evtl. nochmal zum Download bereitstellen ??
genau das benötige ichgerade.
Danke Dirk
Bitte warten ..
Ähnliche Inhalte
PHP
PHP RFC: Mcrypt Extension wird ab PHP 7.2 entfernt
Information von FrankPHP

Ein RFC ist grob eine Abstimmung unter den PHP-Entwicklern, um neue, bestehende oder alte Feature hinzuzufügen, zu ändern, oder ...

PHP
PHP 7.2 veröffentlicht
Information von FrankPHP

Das PHP-Team hat heute, den 30.11.207 die aktuelle Version von PHP 7.2 veröffentlicht. Eine der wichtigsten Änderungen für PHP-Entwickler ...

Administrator.de Feedback
Entwicklertagebuch: PHP 7
Information von admtechAdministrator.de Feedback4 Kommentare

Hallo Administrator User, mit dem heutigen Tag haben wir unsere Server komplett auf die PHP Version 7 umgestellt. Wir ...

PHP
Endlich: PHP bekommt eine offizielle Spezifikation
Information von FrankPHP

Dank Facebook bekommt die Programmiersprache PHP nach über 20 Jahren endlich eine offizielle Spezifikation. Facebook und die PHP-Community arbeiten ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 4 StundenInternet3 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registierunf von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 11 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 22 StundenWindows 103 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement16 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless16 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...