Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Active Directory, dostep przez LDAP - pobieranie danych
Forum PHP.pl > Forum > PHP
idas
Witam,

Mam taki problem do rozwiazania. Jest domena Active Directory, uzyskujemy do niej dostep poprzez LDAP.
Chcialbym [za pomoca odpowiedniej strony php] pobierac odpowiednie dane o uzytkownikach, ktore sie znajduja w Active Directory [np. imie, nazwisko] i wyswietlac je na stronie internetowej.
Wie ktos jak sie do tego zabrac?
Jak uruchomic wsparcie LDAP w PHP?

Dzieki za pomoc smile.gif
Mordoran
Aby wyswietlic login dajemy w html'u (dziala tylko pod IE):

  1. <script language="vbscript">
  2. Set objnetwork=CreateObject("wscript.network")
  3. objComputer=objNetwork.userName
  4. document.write(objComputer)


Aby wyswietlic nazwe komputera dajemu w html'u (dziala tylko pod IE):

  1. <script language="vbscript">
  2. Set objnetwork=CreateObject("wscript.network")
  3. objComputer=objNetwork.ComputerName
  4. document.write(objComputer)


Tylko tyle ostatnio znalazlem.
Jak ktos wie jak imie i nazwisko wiciagnac byl bym wdzieczny.
idas
No dobra, ale to sa skrypty w visual basicu. Nie da sie tego zrobic w PHP?
W ramach sprostowania - chodzi mi o instalacje i prace pod kontrola Windowsa XP [a nie na Linux'ie].

Z tego co zdazylem zauwazyc w skryptach php dostepnych w internecie to chca sie laczyc z serwerem LDAP ogolna postac jest taka:
  1. <?php
  2. ldap_connect();
  3. ldap_bind();
  4. jakies komendy np. search
  5. ldap_unbind();
  6. ldap_disconnect();
  7. ?>


Czyli rozumiem, ze mozna operowac na danych podobnie jak to jest powiedzmy przy bazie SQL...czy sie myle?

Zeby komendy funkcji ldap dzialaly w php wystarczylo "odkomentowac" rozszerzenie w php.ini zwiazane z ldap.Naprawde nikt sie nie bawil pobieraniem, update'owaniem, zmienianiem danych w Active Directory?
Cienki1980
Ja właśnie kończę projekt który ciągnie listę użytkowników z LDAPa. Wszystkie funkcję do łączenia, wyszukiwania i wyrzucania rezultatów z w manualu ale sam zanim wszystko zaczęło mi działać trochę się naprodukowałem.

Skonkretyzuj pytanie a postaram Ci się pomóc.
idas
Jak mozesz to wrzuc przykladowy, pelny kod, w ktorym pobierasz jakies dane o uzytkowniku.Ja musze pobierac z Active Directory informacje typu: imie, nazwisko, oddzial, telefon, mail. Pozniej te dane mam wyswietlic na stronie intranetowej napisanej w php. Dodatkowo beda tez tam opcje edycji danego uzytkownika, dodania nowego, badz usuniecia juz istniejacego. Masz zrobione cos podobnego?Jest jakis sposob na grupowanie wynikow wyszukiwania? Biorac dane z mysql mozna bylo wyciagac wiersz po wierszu z wykonanego zapytania - czy tutaj tez jest taki sposob?DziekiPoradzilem sobie ze wszsytkim, w sumie to banalne, jesli tylko ktos sie bawil wczesniej PHP i zna nazwy pol w AD.Pozdro
jastu
Witam,
też jestem zainteresowany tym zagadnieniem. Jakiś czas temu pisałem o połączeniu z AD, informacji otrzymałem niewiele a chętnie poczytam. Pozdrawiam
Lonas
Hej smile.gif
Ja podpiłabym się pod temat z takim pytaniem

Jak zrobić system logowania oparty o LDAP - być może juz ktoś ma gotowy skrypt ?
idas
Witam!

Jako jedyny nie bede "ciul" i powiem wam o co chodzi.
Na stronie http://www.computerperformance.co.uk/Logon...e_directory.htm macie podane nazwy pol w ActiveDirectory. W manualu PHP sa dokladnie opisane kazde funkcje ldap [zreszta w komentarzach uzytkownikow jest duzo uzytecznych przykladow]. Praktycznie w kazdej ksiazce o PHP te funkcje sa takze wyjasnione.
Funkcja ldap_search mozecie wyszukac wszystkie pola "sAMAccountName" dla "cn=User" [czyli takie w ktorym powinien byc podany login uzytkownika]. Nastepnie wybierajac po kolei znalezione pozycje porownujecie je z wpisanym wczesniej loginem uzytkownika. To pierwsze i chyba najprostsze rozwiazanie logowania w oparciu o ldap i AD.

Maly tip dla was - pomimo, ze nazwy pol w AD maja duze litery, to w PHP nalezy wszystko pisac MALYMI LITERAMI, bo w przeciwnym wypadku skrypt nie bedzie dzialac poprawnie [czyli w przypadku pola "sAMAccountName" wpisujemy w kodzie php "samaccountname].

Pozdro i mam nadzieje, ze wam to pomoże. To naprawde jest banalne.
Cienki1980
Widzę, że zaniedbałem temat sad.gif.

Postaram się teraz to wynagrodzić.

oto klasa napisana przeze mnie której używam do komunikacji z ldap
  1. <?php
  2. class Ldap
  3. {
  4. private $ds;
  5. private $ldapHost;
  6. private $ldapRdn;
  7. private $ldapPass;
  8. private $ldapBind;
  9. private $compare;
  10. private $bind;
  11. public $error;
  12.  
  13. //----------------------------------------------------------------------------
  14. //  Constructor
  15. //----------------------------------------------------------------------------
  16. public function Ldap()
  17. {
  18. $this->ldapHost="ldap://host";
  19. $this->ldapRdn="twoj_rdn";
  20. $this->ldapPass="twoj_haslo";
  21.  
  22. $this->ds=ldap_connect($this->ldapHost);
  23. if(!$this->ds)
  24. {
  25.  $this->error="Błąd połączenia z serwerem LDAP";
  26.  return false;
  27. } 
  28. else
  29. {
  30.  ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
  31.  if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
  32.  {
  33. $this->error="Failed to set LDAP Protocol version to 3, TLS not supported.";
  34. return false;
  35.  }
  36.  
  37.  return true;
  38. } 
  39. }
  40. //----------------------------------------------------------------------------
  41. //  Getting connection
  42. //----------------------------------------------------------------------------
  43. private function isConnected() {if (!$this->ds) return false; return true;}
  44.  
  45. //----------------------------------------------------------------------------
  46. //  Reconnect
  47. //----------------------------------------------------------------------------
  48. private function reconnect()
  49. {
  50. $this->ds=ldap_connect($this->ldapHost);
  51. if(!$this->ds)
  52. {
  53.  $this->error="Błąd połączenia z serwerem LDAP";
  54.  return false;
  55. } 
  56. else
  57. {
  58.  ldap_set_option($this->ds, LDAP_OPT_PROTOCOL_VERSION, 3);
  59.  if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
  60.  {
  61. $this->error="Failed to set LDAP Protocol version to 3, TLS not supported.";
  62. return false;
  63.  }
  64.  
  65.  return true;
  66. } 
  67. }
  68. //----------------------------------------------------------------------------
  69. //  Bind
  70. //----------------------------------------------------------------------------
  71. private function ldapBind($rdn='',$pass='')
  72. {
  73.  if(!$this->isConnected())
  74. $this->reconnect();
  75.  if($rdn=='' && $pass=='')
  76. $this->bind=ldap_bind($this->ds,$this->ldapRdn,$this->ldapPass);
  77.  else
  78. $this->bind=ldap_bind($this->ds,$rdn,$pass);
  79.  
  80.  return $this->bind;
  81. }
  82. //----------------------------------------------------------------------------
  83. //  Login
  84. //----------------------------------------------------------------------------
  85. public function ldapLogin($user,$password)
  86. {
  87.  $filtr="uid=".$user;
  88.  $search=$this->ldapSearch($filtr);
  89.  
  90.  $info = $this->ldapEntries($search);
  91.  
  92.  if($info && $info['count']==1)
  93. if($this->ldapBind($info[0]['dn'],$password))
  94.  return $info[0]['uidnumber'][0];
  95.  
  96.  return false;
  97. }
  98. //----------------------------------------------------------------------------
  99. //  Search
  100. //----------------------------------------------------------------------------
  101. private function ldapSearch($filtr)
  102. {
  103.  if(!$this->bind)
  104. $this->ldapBind();
  105.  
  106.  return ldap_search($this->ds,"ciag_dla_twojego_ldapa",$filtr);
  107. }
  108. //----------------------------------------------------------------------------
  109. //  Get entries
  110. //----------------------------------------------------------------------------
  111. private function ldapEntries($search)
  112. {
  113.  return ldap_get_entries($this->ds, $search);
  114. }
  115. //----------------------------------------------------------------------------
  116. //  Search
  117. //----------------------------------------------------------------------------
  118. public function ldapWyszukaj($filtr)
  119. {
  120.  if(!$this->bind)
  121. $this->ldapBind();
  122.  
  123.  $szukaj=$this->ldapSearch($filtr);
  124.  return $this->ldapEntries($szukaj);
  125. }
  126. }//class
  127. ?>


Jest na tyle prosta, że chyba obędzie się bez zbędnych pytań, jeżeli ktoś jednak będzie chciał się czegoś więcej dowiedzieć proszę napisz pytanie tutaj i daj znak na PW żebym wszedł tutaj i odpowiedział ( w miarę możliwości ).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.