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
GELÖST

LDAP-Login an AD vom Internet aus mittels PHP-Script

Frage Entwicklung PHP

Mitglied: Festus94

Festus94 (Level 1) - Jetzt verbinden

29.12.2011, aktualisiert 20:57 Uhr, 4705 Aufrufe, 11 Kommentare

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:

01.
<?php 
02.
  function ldap_login($server){ 
03.
      if((isset($_COOKIE["cookie_username"]) AND ($_COOKIE["cookie_password"]))){ 
04.
        $username = $_COOKIE["cookie_username"] ; 
05.
        $password = $_COOKIE["cookie_password"] ; 
06.
 
07.
        $check_positive = 1 ; 
08.
09.
      else{ 
10.
       if((isset($_POST["username"]) OR ($_POST["password"]))){ 
11.
         if(empty($_POST["username"]) OR empty($_POST["password"])){ 
12.
           $array["login_complete"] = "Bitte füllen Sie alle Felder aus !" ; 
13.
14.
         else{ 
15.
           if((isset($_POST["username"]) AND ($_POST["password"]))){ 
16.
             $username = $_POST["username"] ; 
17.
             $password = $_POST["password"] ; 
18.
 
19.
             $check_positive = 1 ; 
20.
21.
22.
23.
      else{ 
24.
        $array["login_complete"] = "Sie sind nicht eingeloggt !" ; 
25.
26.
27.
 
28.
    if($check_positive == 1){ 
29.
      if(!($connection = ldap_connect($server))){ 
30.
        $array["login_complete"] = "Verbindung zum Server konnte nicht hergestellt werden !" ; 
31.
32.
 
33.
      ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3) ; 
34.
      ldap_set_option($connection, LDAP_OPT_REFERRALS, 0) ; 
35.
 
36.
      if(!($bind = ldap_bind($connection, $username, $password))){ 
37.
        $array["login_complete"] = "Login fehlgeschlagen !" ; 
38.
39.
      else{ 
40.
        setcookie("cookie_username", $username, time()+(60*60)) ; 
41.
        setcookie("cookie_password", $password, time()+(60*60)) ; 
42.
 
43.
        $array["login_check"] = true ; 
44.
45.
46.
 
47.
    $array["username"] = $username ; 
48.
    $array["password"] = $password ; 
49.
    $array["connection"] = $connection ; 
50.
 
51.
    return $array ; 
52.
53.
?>
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:

  1. 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?
  2. Ist das Script fehlerhaft, und deshalb kommt keine Bindung zustande?
  3. 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
Mitglied: dog
29.12.2011 um 20:13 Uhr
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.
Bitte warten ..
Mitglied: Festus94
29.12.2011 um 20:18 Uhr
Hi dog,

ich bin für Verbesserungsvorschläge immer offen. ;)

Ich habe sowohl den einfachen Namen, als auch das Format vom DN benutzt. (cn=benutzer, cn=users, dc=..., dc=local)

Beides hat nicht geklappt.

Kannst Du das irgendwie erklären ?

Wie soll ich denn nach dem Benutzerobjekt suchen, ohne eingeloggt zu sein ?
So wieich das verstanden habe, muss ich mich normal mit dem User einloggen und dann kann ich die Dienste des ADs nutzen.

Welches Dienstkonto meinst Du denn ?


Gruß
tbnwadm
Bitte warten ..
Mitglied: dog
29.12.2011 um 20:31 Uhr
Kannst Du das irgendwie erklären ?

Ich kann dir nur sagen, das es bei mir problemlos funktioniert.
Über Internet und mit Server 2008 und 2008 R2.

Welches Dienstkonto meinst Du denn ?

Im Fall von Windows das Computerkonto.
Es reicht aber schon irgendein Konto das mind. das AD durchsuchen kann.
Bitte warten ..
Mitglied: Festus94
29.12.2011 um 20:45 Uhr
Okay, so hab' ich's ja auch. W2K8 R2...

Die PCs, die darauf zugreifen sollen, sind aber nicht Teil der Domäne. Es sind normale Heim-PCs.

Wenn es nur solch ein Konto sein muss, dann wäre doch auch direkt das Benutzerkonto des Users okay, oder ?
Bitte warten ..
Mitglied: dog
29.12.2011 um 20:53 Uhr
Wenn es nur solch ein Konto sein muss, dann wäre doch auch direkt das Benutzerkonto des Users okay, oder ?

Ja, wenn du dessen DN kennst.
Umlaute können in Benutzernamen/Passwort für Probleme sorgen.
Bitte warten ..
Mitglied: Festus94
29.12.2011 um 21:21 Uhr
Okay, der DN für einen User "LDAP", der direkt in der Kategorie "Users" liegt, hat doch dann den DN

CN=LDAP, CN=Users, DC=Domänen-Name, DC=Domänen-Suffix

oder ?

Umlaute habe ich nicht drinnen, aber danke für den Hinweis.
Bitte warten ..
Mitglied: Dirmhirn
29.12.2011 um 22:33 Uhr
Hi!

schau dir mal adLDAP an:
http://adldap.sourceforge.net/
ist ganz praktisch.

hast schon mal die "ldap_set_option" weggelassen?

sg Dirm
Bitte warten ..
Mitglied: Festus94
29.12.2011 um 22:45 Uhr
Hi,

danke, das hört sich interessant an.

Allerdings steht auf der Seite, dass die Klasse für Linux entwickelt wurde. Ich habe allerdings 2K8 R2er-Server im Einsatz.
Funktioniert das trotzdem ?


Danke !
Bitte warten ..
Mitglied: Dirmhirn
29.12.2011 um 23:09 Uhr
Hi!

dein php läuft auf Windows?
Ich verwends auf einem Ubuntu Server und frag ein Win 2k3 R2 AD ab. Hatte vorher auch direkt die PHP-Funktionen genutzt. Habs vor kurzem gefunden und manches macht die Klasse schon einfacher.- darum hab ichs hier erwähnt.
Im Zweifel ausprobieren.

sg Dirm
Bitte warten ..
Mitglied: Festus94
29.12.2011 um 23:49 Uhr
Nee, ich habe die Seiten bei 'nem normalen Provider.

Mein AD läuft auf 'nem 2K8er...
Bitte warten ..
Mitglied: Festus94
01.01.2012 um 19:44 Uhr
Ich habe adLDAP ausprobiert, und es ist genial. Danke für den Tipp !!!


Viele Grüße und FROHES NEUES !
tbnwadm
Bitte warten ..
Ähnliche Inhalte
PHP
PHP LDAP Login
gelöst Frage von schneerunzelPHP11 Kommentare

Hallo Zusammen, ich brauche eine Website auf der man sich mit seinen LDAP Account anmelden kann und dann eine ...

PHP
MYSQL und PHP Login Script
gelöst Frage von GoldencreeperPHP17 Kommentare

Hallo liebe Administrator Community. Ich habe Arbeite grade an einer Status Seite für einen Hoster. Die Seite ist auch ...

PHP
PHP LDAP Login Gruppen Abfrage
gelöst Frage von schneerunzelPHP7 Kommentare

Hallo Zusammen ich habe dieses PHP Script: Dieses Script stammt von einem anderen User aus diesem Forum Unschwer zu ...

Windows Server
LDAP in PHP
Frage von pipoomaWindows Server10 Kommentare

Halloo zusammen, ich habe Aufgabe von meinem Chef bekommt und zwar Single Sign-On. Wir entwickeln im Haus einen Portal ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 103 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.