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

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, 4606 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 ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...