Php domeeni autoriseerimine. Sõltuvused, abifunktsioonid

Sellest jaotisest saate teada, kuidas kataloogiserverist andmeid otsida ja sealt tuua, samuti kirjeid lisada, muuta ja kustutada.

ldap_search()

ressurss ldap_search (ressursi lingi_identifikaator, string base_dn, stringifilter [, massiivi atribuudid [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
Funktsioon ldap_search() pakub võimsat vahendit kataloogiserveri otsimiseks, millele viitab link_identifier. See otsib LDAP_SCOPE_SUBTREE sügavusele, mille saab määrata eelnevalt kasutusele võetud funktsiooni ldap_set_option() kaudu. Vaikimisi on see väärtus seatud otsima lõpmatu sügavusega või kogu puu ulatuses, nagu on määratletud parameetriga base_dn. Otsingufilter, mis on samaväärne relatsioonilise andmebaasi päringuga, edastatakse filtri parameetri kaudu. Lõpuks saate atribuutide parameetri kaudu täpselt määrata, millised atribuudid tuleks otsingutulemustes tagastada. Ülejäänud neli parameetrit on valikulised ja seetõttu jätan selle ruumi huvides teile nende kohta lisateabe saamiseks harjutuseks. Vaatleme näidet:

"; ) ldap_unbind($ad); ?> Tulemuste valim on järgmine: Gilmore, Jason (Columbus) Shoberg, Jon (Columbus) Streicher, Martin (San Francisco) Wade, Matt (Orlando)

Suurem osa sellest on tõenäoliselt lihtne, välja arvatud potentsiaalselt veider viis, kuidas atribuutide väärtustele viidatakse. Kõik atribuudiread on lõppkokkuvõttes mitmemõõtmelised massiivid, kus igale atribuudi väärtusele viitab reanumbri, atribuudi nime ja atribuudi massiivi indeksi kombinatsioon. Näiteks isegi sellised atribuudid nagu "sn", mis on kasutaja perekonnanime atribuudinimi, on indekseeritud massiiv.

ldap_mod_add()

boolean ldap_mod_add(ressursi lingi_id, string dn, massiivi kirje)
Kirjete lisamine kataloogiserverisse toimub funktsiooni ldap_mod_add() kaudu. Uus kirje lisatakse lihtsalt massiivi loomisega, mis koosneb atribuutide/väärtuste vastendustest, mis on ette nähtud uue rea moodustamiseks. Seda protsessi saab ehk kõige paremini selgitada näitega:

Nagu kõigi kataloogiserveri ülesannete puhul, veenduge, et siduval kasutajal on sihtandmete lisamiseks vajalikud õigused; vastasel juhul tekivad vead.

ldap_mod_replace()

tõeväärtus ldap_mod_replace(ressursi lingi_id, string dn, massiivi kirje)
Kirje atribuutide muutmine toimub funktsiooni ldap_mod_replace() kaudu. See toimib täpselt nagu ldap_add(), välja arvatud lisatud samm, mille eesmärk on identifitseerida kirje, mida soovite muuta. Seda tehakse, osutades väga spetsiifilisele dn-ile. Nagu ldap_add(), on nii kehtiv lingi identifikaator kui ka massiiv, mis koosneb tuleb sisestada kirjed, mida soovite värskendada. Järgneb näide, mis näitab, kuidas kasutaja telefoninumbrit muudetaks. Pöörake eelkõige tähelepanu väga spetsiifilisele keelamisnumbrile (mis osutab minu konkreetsele kirjele).

Nagu kõigi kataloogiserveri ülesannete puhul, veenduge, et siduval kasutajal on sihtandmete muutmiseks vajalikud õigused; vastasel juhul tekivad ootamatud vead.

ldap_delete()

tõeväärtus ldap_delete(ressursi lingi_id, string dn)
Meie peamiste PHP LDAP-funktsioonide uuringu lõpetab ldap_delete(). Seda funktsiooni kasutatakse olemasoleva kirje kustutamiseks. Nagu ldap_mod_replace(), tuleb kustutamiseks esitada väga spetsiifiline DN. Järgmine näide näitab, kuidas eemaldada Active Directory kasutajakirje "Jason Gilmore".

Nagu kõigi kataloogiserveri ülesannete puhul, veenduge, et siduval kasutajal on sihtandmete kustutamiseks vajalikud õigused; vastasel juhul tekivad ootamatud vead.

Active Directory otsimine veebi kaudu

Mulle meeldib alati täiendada õpetust sobiva näitega, mida lugejad saavad kohe oma vajadustega kohandada. Selles õpetuses näitan teile, kuidas luua otsinguliidest, mis suudab otsida nime, asukoha või telefoninumbri järgi. Peate vaid muutma ühenduse muutujaid ja baasnimetust. Alustuseks loome otsinguliidese, mis salvestatakse nimega "search.html":

Otsingu kriteerium:

Filter:

Joonis 1 pakub näidet selle kohta, kuidas see otsinguvorm brauseris välja näeb.

Joonis 1. Active Directory otsinguvorm

Järgmiseks peame looma loogika, mis mõjutab otsingut. See lühike koodilõik on näidatud siin:

0) ( jaoks ($i=0; $i<$entries["count"]; $i++) { echo "

Nimi: ".$entries[$i]["kuvanimi"]."
"; echo "Telefon: ".$entries[$i]["telefoninumber"]."
"; echo "E-post: ".$entries[$i]["mail"]."

";) ) else ( kaja "

Tulemusi ei leitud!

"; ) ldap_unbind($ad); ?>

Saate muuta otsinguliideses määratud toimingu sihtkohta, suunates selle ülaltoodud skriptist koosnevale failile või koondada selle otsinguliidesega samasse faili ning kasutada käivitamiseks käsku isset() ja tingimuslikku tingimust juhul, kui otsingu esitamise nupp on alla vajutatud. Loomulikult soovite enne sellise skripti juurutamist lisada mõned täiendavad andmete valideerimise kriteeriumid. Joonisel 2 on toodud otsingutulemuste näidis.

Joonis 2. Otsingutulemused

Järeldus

Kuigi PHP on pikka aega olnud minu peamine veebirakenduste arendamise keel, olen leidnud, et Perl on minu programmeerija tööriistakomplekti lahutamatu osa. Kataloogiserveritega töötades pole see tunne erinev. Seetõttu on järgmine artikkel pühendatud Perli/LDAP põhitõdedele. Nagu selle artikli puhul, on kõik näited spetsiifilised Microsofti Active Directory kohta, kuigi teil peaks olema võimalik neid hõlpsasti rakendada mis tahes kataloogiserveri juurutamisel. Täiendame seda artiklit näitega, mis näitab, kuidas luua staatilise vahemälu Veebipõhised kasutajakataloogid, mis kasutavad Perli skripti ja CRON-i (või Windows Task Scheduleri).

Ootan küsimusi ja kommentaare! Kirjuta mulle aadressil [e-postiga kaitstud]. Tahaksin ka rohkem kuulda teie kogemustest Microsofti ja avatud lähtekoodiga tehnoloogiate integreerimisel!

Autori kohta

W. Jason Gilmore (http://www.wjgilmore.com/) on Fisher College of Business Interneti-rakenduste arendaja. Ta on eelseisva raamatu PHP 5 ja MySQL: Novice to Pro autor, mis ilmub Apressi poolt 2004. aastal. Tema töid on kajastatud paljudes arvutitööstuse juhtivates väljaannetes, sealhulgas Linux Magazine, O"Reillynet, Devshed, Zend.com ja Webreview on ka raamatu A Programmer's Introduction to PHP 4.0 (453 lk, Apress) autor. Koos kolleeg Jon Shobergiga on ta Linuxi ajakirjas ilmuva igakuise veeru "Out in the Open" kaasautor.

IT-lahenduste koostaja TOP IT RESSURSID TEIE ETTEVÕTE EDASI LIIKUMISEKS

Drupalit võib kergesti nimetada universaalseks tööriistaks erinevate ülesannete, sealhulgas teatud keerukusega ettevõttelahenduste rakendamiseks.
Juhtub nii, et kasutan Drupalit peamiselt ettevõttes, sees Intranet võrk, millel on Active Directory. Ja selleks, et täielikult
kasutada meie võrgu infrastruktuuri, minimaalne programm on Active Directory autoriseerimine saitidel ja teenustes ning siin on Drupalil probleeme
ei, tänu Lightweight Directory Access Protocol (LDAP) moodulile.
Selles artiklis tahan teile rääkida, kuidas see minu keskkonnas on konfigureeritud, ja võib-olla on kellelegi see artikkel kasulik.

Seega ütlen kohe, et selle mooduli abil saate pakkuda:
1. LDAP autoriseerimine teie võrgus (minu puhul kasutatakse seda Active Directory Microsoftilt)
2. Seadistage täielik autoriseerimine (kui kasutaja logib automaatselt sisse operatsioonisüsteemi konto all)
3. Piirake juurdepääsu neile, kes saavad saidile siseneda ja kes mitte.
4. Sünkrooni konto atribuudid Active Directory kasutajaprofiili väljadega saidil ja vastupidi.
5. Konto värskendamine veebisaidil pärast konto sisselogimise muutmist Active Directory(tavaliselt juhtub pärast töötaja perekonnanime muutmist - sisselogimine muutub sarnaselt)
6. Rolli määramine kasutajale saidil sõltuvalt tema asukohast teatud rühmas Active Directory

Sest Olen endiselt aktiivne Drupal 7 kasutaja, seega annan kõik juhised selle näite põhjal, kuid jällegi, kui ma Drupal 8 oma lõbuks käivitasin,
siis sain aru, et moodul on peaaegu identne Drupali 7. versiooniga.

Kopeerime mooduli andmed ja ka nende sõltuvused endale Tööriistad Ja Entity API. Moodulite lehel aktiveerime järgmised moodulid:

  1. LDAP autentimine
  2. LDAP-i autoriseerimine (valikuline moodul, kui peate piirama juurdepääsu saidile või saidirollidele, lähtudes kasutaja asukohast Active Directory rühmades)
  3. LDAP autoriseerimine – Drupali rollid (lisand ülalkirjeldatud moodulile)
  4. LDAP-serverid
  5. LDAP SSO (moodul on valikuline, kui te ei vaja täielikku autoriseerimist või kuni veebiserver on selleks konfigureeritud, ei saa te seda installida)
  6. LDAP-i kasutajamoodul

Väärib märkimist, et moodulit ei installita, kui moodul pole teie PHP sätetesse installitud php_ldap. Seetõttu installige see eelnevalt ja konfigureerige see vastavalt oma keskkonna omadustele.

Pärast mooduli edukat installimist läheme selle sätete juurde, mis asuvad siin admin/config/people/ldap

Mooduli sätted on jagatud 4 vaheleheks: Seaded, Serverid, Kasutaja, Autentimine, Autoriseerimine

Esimene vahekaart konfigureerib konto paroolide krüptimise meetodi Active Directory Drupali sees.

Oma praktikas ma seda ei kasuta, seega lähen kohe teisele vahelehele Serverid. Ja siin käsitleme üksikasjalikumalt.
Vahekaardil kuvatakse kõik loodud LDAP autoriseerimisserverid, mida saidil kasutatakse, vaikimisi on see loend tühi ja saame kasutada nuppu Lisage LDAP-serveri konfiguratsioon saate luua uue serveri.
Serveri loomise leht on jagatud mitmeks plokiks, vaatame neid kõiki:

Ühenduse seaded

Selle serveri konfiguratsiooni masina nimi. - loodava serveri tegelik masinanimi. Tavaliselt helistan aktiivne_kataloog
Nimi ** - mingi muu serveri nimi, ma kutsun ka seda aktiivne_kataloog
**Lubatud
- märkige ruut, lubades seega loodava serveri konfiguratsiooni
LDAP-serveri tüüp- minu puhul valin Active Directory
LDAP server- minu puhul domeeninimi või IP-aadress, kus Active Directory server asub ad.zv
LDAP port- Ma jätan selle vaikimisi 389 , meil on sama
Kasutage Start-TLS-i- Ma ei märgi kasti, sest... me ei kasuta krüptimist
Järgige LDAP-i viiteid- Ma ei määra seda ka, kuigi ma pole ikka veel täielikult aru saanud, miks seda seadet vaja on

Bingind meetod

Otsingute sidumismeetod (nt kasutajaobjekti või nende rühmaliikmete leidmine)
Teisisõnu küsitakse, kuidas kelle nimel luuakse ühendus Active Directory serveriga, et otsida kasutaja olemasolu, lugeda tema atribuute jne.
Nii nagu tähenduse kirjelduses, kasutan esimest varianti Teenusekonto sidumine parima tavana.
Nimelt tekib ühendus serveriga spetsiaalselt Active Directory'is eelnevalt loodud kontolt, millel on õigus lugeda katalooge ja Active Directory struktuuri
Valides selle allpool oleva valiku, peate väljadele määrama oma teenusekonto sisselogimise ja parooli DN mitteanonüümseks otsinguks Ja Parool mitteanonüümseks otsinguks

Kustutage olemasolev parool andmebaasist. Kontrollige seda teenusekonto sidumisest loobumisel- üksus ei ole meie ülalkirjeldatud meetodi puhul rakendatav, seega ei tee me linnukest.

LDAP kasutaja ja Drupali kasutaja suhe

LDAP-i kasutajate, rühmade ja muude kirjete põhilised DN-id- baas-DN, kus kõik kasutajad asuvad Active Directory's, minu puhul määran DC = reklaam, DC = zv. Selle sätte puhul on parem konsulteerida oma Active Directory serveri süsteemiadministraatoritega
Atribuut AuthName Ja Atribuut AccountName- atribuut, milles on salvestatud kasutaja sisselogimine ja konto nimi, tavaliselt peaksid need olema samad ja enamikul juhtudel on see näidatud samakontonimi, sest vaikimisi asub sisselogimine seal Active Directorys
E-posti atribuut- minu puhul atribuut, milles kasutaja postkast asub mail. Väärib märkimist, et Drupali jaoks on see väli kohustuslik, kuna Drupalil ei saa olla ilma postkastita kasutajat, nii et kui teie keskkonnas on võimalus, et on ilma postkastita kasutajaid, siis peate kasutama allolevat välja, et täita postkasti malli abil või hiljem mõnel muul vahekaardil naaske teiselt poolt selle seadistuse juurde.
Meili mall- postkasti mall, mida kasutatakse siis, kui teie postkastid on näiteks identsed sisselogimisandmetega või koosnevad mitmest Active Directory kasutajaatribuudist. Seetõttu saate selle lihtsalt atribuudimärkidest koostada.
Pisipildi atribuut- atribuut, milles kasutaja pilt asub (binaarses vormis), et hiljem Drupalis kasutaja profiili kujutisse laadida, minu puhul pisipiltPhoto
Püsiv ja kordumatu kasutaja ID atribuut- unikaalne atribuut, mis Active Directory kasutaja jaoks kunagi ei muutu. Seda kasutatakse juhtudel, kui teie sisselogimiseks on näiteks kasutaja perekonnanimi ja initsiaalid ning kui järsku muutis kasutaja oma perekonnanime ja seejärel muudeti tema sisselogimist, siis järgmine kord, kui ta Drupali saidile sisse logib, on ta vaikimisi uueks kasutajaks ja Drupal loob uue konto (muidugi eeldusel, et ka postkasti on muudetud, sest kui see jääb samaks, siis Drupal teatab postkasti konfliktist ja uut kirjet ei loo). Seetõttu toimib see väli unikaalse võtmena, mida vaadatakse esmalt, kui kasutaja saidile siseneb, isegi kui ta on oma sisselogimist muutnud, leiab Drupal selle esmalt selle atribuudi abil ja seejärel loob ühenduse Active'iga Kataloogikasutaja ja selle tulemusena värskendada oma sisselogimist Drupali veebisaidil. Minu puhul on objektisid
Kas atribuudil Püsiv ja kordumatu kasutaja ID on binaarne väärtus? - Panin linnukese, sest objektisid salvestatud kahendvormingus.

Ma pole kunagi arvanud, et mind selline ülesanne ees ootab, kuid ühel ilusal päeval tekkis vajadus luua ettevõttesiseseks kasutamiseks mõeldud portaal. Organisatsioonil on domeen ja selles domeenis hulk kasutajaid. Kindlasti oleks lahe mitte luua entiteete (mitte luua kasutajatele uusi kontosid), vaid end kuidagi domeeni külge siduda.

Alguses oli pikk ajurünnak ja otsustasime, mille peale see portaal teha – kas käsitsi PHP-s või ASP-s või kasutame mõnda valmis kõrgelt spetsialiseerunud toodet ja kasutame seda. Vaatamata sellele, et see toode peaks olema tasuta. Loomulikult ei leitud konkreetselt ettevõtteportaali jaoks mõistlikku tasuta lahendust ja polnud erilist soovi seda kõike käsitsi kirjutada, tekkis mõte - "võib-olla Joomla?"

Alguses üritati seda ideed maha matta, sest see “pole lahe”, aga mida edasi seda arutati, seda enam kaldus kaalukauss Joomla kasuks. Tõestatud, laialt levinud ja täiesti tasuta. Jääb otsustada vaid üks asi – kuidas ühendada Joomla Active Directoryga. Selgus, et see on võimalik, kuigi see nõudis veidi nokitsemist.

Ma ei hakka kirjeldama selliseid lihtsaid tõdesid, näiteks kuidas Joomla kohalikule hostile installida ja nii edasi, otse asja juurde.

1. etapp – faili PHP.ini redigeerimine

Peate rea kommentaarid tühistama:

laiend=php_ldap.dll

See on teek, mis võimaldab Joomlal LDAP-protokolli kasutades Active Directory domeeniga suhelda.

2. etapp – pistikprogrammi "LDAP autoriseerimine" seadistamine

Läheme pistikprogrammide haldurisse ja otsime nende hulgast „LDAP-i autoriseerimist”, aktiveerime selle.

Oletame, et meie domeeni nimi on domeen.local, domeenikontrolleri aadress on 192.168.0.1.

Plugina seadetes tuleb teha järgmised sätted (vähemalt minu puhul töötas see nii :)

Parameeter Tähendus Kommentaar
Host 192.168.0.1 Domeenikontrolleri IP-aadress
Port 389 ära puutu
Käivitage LDAP3 JAH
Tehke TLS EI
Jälgi ümbersuunamisi EI
Autoriseerimismeetod Tehke ja otsige Eduka autoriseerimise korral loob Joomla oma sisemise konto, mille saab seejärel paigutada ühte või teise juurdepääsugruppi. Kahjuks ei saa Joomla Active Directoryst kasutajagruppe üles tõmmata. Kui leiate viisi, kuidas seda teha, jagage seda artikli kommentaarides!
Põhiline DN dc = domeen, dc = kohalik Jagame domeeni tasemeteks ja iga taseme ette kirjutame dc=..., nende vahel pole tühikuid, on ainult komad
Otsi rida sAMAccountName= Registreerimine on oluline!
Kohandatud DN jätke see tühjaks
Ühenduse kasutajanimi See e-posti aadress on spämmirobotite eest kaitstud. Selle vaatamiseks peab teil olema JavaScript lubatud. Domeeni administraatori nimi
Ühenduse parool qwerty123 Vastavalt sellele domeeni administraatori parool
Kaart: täisnimi kuvanimi Kuidas kasutajanime saidil kuvatakse
Kaart: e-post mail sama asi - email
Kaart: Kasutaja ID uid kasutaja ID

Salvestame seaded, avame saidi ja proovime sisse logida. Sel juhul sisestage domeeni kasutajanimi ilma@domain.local – kõik peaks toimima!

Ma kahtlustan, et paljud nüansid sõltuvad tarkvaraversioonidest. Seda kõike testiti igaks juhuks järgmises serveris:

  • Veebiserver – Xampp 5.6.15 (PHP 5.6.15)
  • Joomla 3.6.3
  • Windows Server 2008 R2 domeenikontroller

lisatud 26.10.2016

Imelikkus märgatud- Joomla ei soovi autoriseerida kasutajaid, kelle domeeni sisselogimine ei ühti nende Exchange'i meiliaadressiga. Sisselogimisel kuvatakse veateade:

Hoiatus

Teil ei ole juurdepääsu saidi piiratud aladele.

Sellele probleemile pole veel lahendust leitud. Kui teate, kuidas sellest üle saada, jagage seda kommentaarides.