HowTo: User via PHP an einem W2K-AD verifizieren ....

Bash, Shell, PHP, Python, Perl, CGI
hbaes
Posts: 70
Joined: 2002-10-08 21:04

HowTo: User via PHP an einem W2K-AD verifizieren ....

Post by hbaes »

Für alle M$ Webserverbetreiber:

Für alle, die wie ich vergeblich versucht haben, einen diesbezüglichen Ansatz im Web zu finden, jetzt hier meine erarbeitete Lösung:

Worum es geht:
User sollen auf der PHP-Website mit Ihrem Domain-Account (W2K Active-Directory) verifiziert werden. Praktisches Beispiel: Intra & ExtraNet. War aufgrund der verifizierung bislang immer "nur" durch ASP (igitt) Seiten lösbar ...

Hintergrund:
1.) in der Domain (es wird hier von einer Domain ausgegangen) wird ein technischer User mit ADMINISTRATIONSRECHTEN benötigt... (zwecks Zugriff auf ActiveDirectory)
2.) Folgende Variablen werden vorrausgesetzt: (zB.: aus einem Login-Formular)
a.) $user = Domain-Login Username (ALIAS)
b.) $passwd = Domain-Passwort
3.) $ldaptu = technischer Useraccount (siehe oben) im Format: 'domainuseraccount' ( Die Domainangabe ist wichtig!!)
4.) $ldappw = Passwort des technischen Users
5.) $ldapsrv = Domaincontroller (ein beliebiger GC, muß nicht PDC od. BDC sein)
6.) $ldapqry = LDAP Query, um Useraccounts im AD via LDAP zu finden (siehe unten)
7.) $ldaprootdn = LDAp Stamm, ab wo nach dem User gesucht werden soll, wenn die domain zB.: domain.local hiesse, wäre dies: "DC=domain,DC=local"

so hier mal mein Ansatz:

Code: Select all

... //div. Ã?berprüfungen, ob Variablen $user und $passwd leer sind ...
...
$ldapcon = ldap_connect($ldapsrv);
   if(!$ldapcon){
      //error: keine Verbindung zum Domaincontroller
   }else{
      // binden zum ldap server
      $ldapbind = ldap_bind($ldapcon, $ldaptu, $ldappw);
      if(!$ldapbind) {
         //error: Technischer User kann sich nicht anmelden
      }else{
         $filter=sprintf($ldapqry,$user);
         $sr=ldap_search($ldapcon,$ldaprootdn, $filter);
         if(!$sr){
            //error: Fehler in $ldapqry
         }else{
            $r=ldap_count_entries($ldapcon,$sr);
            if(!$r){
               //error: BENUTZER EXISTIERT NICHT !!!!!
            }else{
               // jetzt noch das passwort überprüfen, dazu muß sich der user via ldap direkt verifizieren.
               // um sich jedoch anmelden zu können brauchen wir den LDAP-DN (Distinguished Name) des Users
               //get the dn of the user ...
               $info = ldap_get_entries($ldapcon, $sr);
               $userdn=$info[0]["dn"];
               // now check if we can bind the user ...
               $t=ldap_bind($ldapcon, $userdn, $passwd);
               if(!$t){
                  //error: DAS PASSWORT STIMMT NICHT
               }else{
                  // USER IST IM AD SO WIE ANGEGEBEN ANGELEGT UND KANN SICH ANMELDEN !!!!!!!!!!!!!!
}}}}}...
So zur Ldap-Query:
folgende Objekte verwende ich zur Abfrage:
'(&(sAMAccountType=805306368)(sAMAccountName=%s))'

unter sAMAccountType wird im LDAp der Typ des Accounts abgelegt (user, drucker, rechner, server, gruppe, usw...). Dieser Wert u.U. anders lauten ... (vorher mit dem LDApBrowser nachgucken)
und unter sAMAccountName liegt der Login-Alias, %s ist ein String-Platzhalter (von sprintf() )

so, viel Spaß !!!!

Harald
fritz
Posts: 891
Joined: 2002-04-23 20:12
Location: Lehrte / Hannover

Re: HowTo: User via PHP an einem W2K-AD verifizieren ....

Post by fritz »

[Nullantwort-Löschung verhindern]