ldap ट्यूटोरियल
शुरुआत लैपप से हो रही है
खोज…
टिप्पणियों
इस अनुभाग में यह बताया गया है कि ldap क्या है और एक डेवलपर इसका उपयोग क्यों करना चाहता है।
इसमें ldap के भीतर किसी बड़े विषय का भी उल्लेख होना चाहिए, और संबंधित विषयों के लिए लिंक करना चाहिए। चूंकि ldap के लिए दस्तावेज़ीकरण नया है, इसलिए आपको उन संबंधित विषयों के प्रारंभिक संस्करण बनाने की आवश्यकता हो सकती है।
LDAP के साथ काम करने के लिए PHP की स्थापना
आपके LDAP सर्वर को सही तरीके से कॉन्फ़िगर करने के बाद, अब हम कनेक्ट करना चाहते हैं। उदाहरण के लिए PHP का उपयोग करके।
- डीएन = प्रतिष्ठित नाम। इसका मतलब है, आप डेटाबेस के किस भाग में काम कर रहे हैं। एक उपयोगकर्ता या एक समूह हो सकता है (या सेटिंग्स भी कॉन्फ़िगर कर सकता है)।
- प्रविष्टि: एक इकाई, उदाहरण के लिए एक उपयोगकर्ता।
- विशेषता: एक प्रविष्टि के अंदर कुछ, उदाहरण के नाम, फोन नंबर और ईमेल पते के लिए।
कनेक्ट
सबसे पहले, हम निम्नलिखित को परिभाषित करते हैं:
$server = "server.example.com"; //this is the LDAP server you're connecting with
$ds = ldap_connect("ldaps://$server", 636); //always connect securely via LDAPS when possible
अब, हम जुड़े हुए हैं। अगली चीज़ जो हम चाहते हैं, वह यह है कि सर्वर को यह पता चले कि हम एक भरोसेमंद व्यक्ति हैं। डेटाबेस को देखने के लिए उचित अनुमतियों के साथ रूट डीएन या मौजूदा उपयोगकर्ता का उपयोग करना सबसे आसान उपाय है (शायद डेटाबेस में प्रत्येक उपयोगकर्ता डिफ़ॉल्ट रूप से ऐसा कर सकता है)। हम बाइंड फ़ंक्शन का उपयोग करके प्रमाणित करते हैं।
विकल्प सेट करें
सबसे पहले, हम इन विकल्पों की घोषणा करते हैं। आपके सर्वर कॉन्फ़िगरेशन के आधार पर, आप इसे छोड़ सकते हैं।
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
बाइंडिंग
मान लें कि आप व्यवस्थापक का उपयोग कर रहे हैं और पासवर्ड pass123notsafe है
$dn = "uid=admin,cn=users,dc=server,dc=example,dc=com";
$pass = "pass123notsafe";
$ldapbind = ldap_bind($ds, $dn, $pass); //this is the point we are authenticating
यह बहुत अच्छा है। हम अंदर हैं। अब हम कई अलग-अलग ऑपरेशन कर सकते हैं। उदाहरण के लिए, हम उपयोगकर्ताओं और यहां तक कि समूहों को खोज, पढ़, लिख और संशोधित कर सकते हैं।
खोज कर
कल्पना करें कि हम समूह "उपयोगकर्ता" के सभी सदस्यों को प्रदर्शित करना चाहते हैं।
$dn = "cn=users,dc=server,dc=example,dc=com"; //very important: in which part of your database are you looking
$filter = "uid=*"; //don't filter anyone out (every user has a uid)
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope
$results = ldap_get_entries($ds, $sr); //here we are pulling the actual entries from the search we just defined
var_dump($results); //will give you all results is array form.
डेटा को अच्छे तरीके से प्रदर्शित करने के लिए आप फ़ॉरच लूप का उपयोग कर सकते हैं।
ठीक है, यह मिल गया? अब कुछ फ़िल्टरिंग के साथ आगे बढ़ें। हम समूह "बाइक मालिकों" में केवल उन उपयोगकर्ताओं को प्रदर्शित करना चाहते हैं जिन्होंने ईमेल पता पंजीकृत किया है। यह जानना महत्वपूर्ण है कि सभी उपयोगकर्ता cn = उपयोगकर्ताओं में हैं। इसके आगे, वे अन्य समूहों के सदस्य भी हो सकते हैं।
//did the connecting and binding
$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com"; //note the extra "cn=groups" for looking in a group that is not "users"
$filter = "email=*"; //email address must be set but can be anything
$sr = ldap_search($ds, $dn, $filter) or die ("bummer"); //define your search scope
और अब फिर से ldap_get_entries साथ आगे बढ़ें।
प्रविष्टियाँ प्राप्त करने में दक्षता
एक उदाहरण जिसमें दक्षता को संबोधित किया जाता है, बड़े डेटाबेस के साथ तेजी से प्रवेश के प्रति बहुत अधिक विशेषताओं के साथ महत्वपूर्ण है। विशेष रूप से जब आप विशेषता jpegphoto में चित्र संग्रहीत कर रहे हैं, तो यह आपके लोडिंग समय को काफी कम कर सकता है जब आप चुनिंदा प्रविष्टियों को खींचते हैं।
कल्पना करें कि हम उन उपयोगकर्ताओं की तलाश करना चाहते हैं जो समूह "बाइकसाउनर्स" में हैं। इन प्रविष्टियों के अंदर बहुत सी जानकारी संग्रहीत है, मान लें कि उनके पास निम्नलिखित विशेषताएं हैं: cn, uid, name, displayname, mail, initials, mobile, telephonenumber, street, postaladdress, postalcode and jelphoto। अब हमें केवल उनके यूआईडी, नाम और आद्याक्षर की आवश्यकता है।
इसके लिए, हम ldap_search के एक वैकल्पिक चौथे पैरामीटर का उपयोग करते हैं:
$dn = "cn=bikeowners,cn=groups,dc=server,dc=example,dc=com";
$filter = "uid=*"; //
$justhese = array("uid", "name", "initials");
$sr = ldap_search($ds, $dn, $filter, $justthese) or die ("bummer"); //define your search scope
और ldap_get_entries , ldap_get_entries चलाने से आपको केवल ये डेटा मिलेगा।
उन्नत फ़िल्टरिंग
बेशक, आप LDAP के साथ एक संपूर्ण डेटाबेस खींच सकते हैं, और इसे आगे PHP में संसाधित कर सकते हैं। हालाँकि, बस MySQL के साथ यह प्रोसेसिंग सर्वर-साइड करने के लिए बहुत अधिक कुशल है। इसे प्रदर्शित करने के लिए, हम एक उन्नत फ़िल्टर का उपयोग कर सकते हैं।
बिंदु के रूप में उपरोक्त उदाहरणों में से एक को शुरू करें, लेकिन नीचे की रेखा के अनुसार $ फ़िल्टर बदलें। हमारे उदाहरण में, हम उन उपयोगकर्ताओं का डेटा प्रदर्शित करना चाहते हैं जो सक्रिय हैं। आम तौर पर, इस जानकारी को संग्रहीत करने के लिए विशेषता shadowexpire का उपयोग किया जाता है। हालाँकि, यह विभिन्न LDAP प्रणालियों में भिन्न हो सकता है। न केवल हम उन है कि सक्रिय हैं प्रदर्शित करना चाहते हैं, बल्कि उनके नाम के साथ एक "एक" और वे एम्स्टर्डम में जीना चाहिए शुरू करनी चाहिए।
मूल रूप से हम तीन काम करना चाहते हैं:
- सबसे आसान: एम्स्टर्डम में रहना चाहिए। इस उदाहरण में निवास का स्थान विशेषता 'पोस्टडैड्रेस' में संग्रहीत है
$filter= "postaladdress=Amsterdam";
- नाम एक "ए" से शुरू होना चाहिए। इस उदाहरण में, UID नाम से बना है, इसलिए:
$filter= "uid=a*";
- उपयोगकर्ता सक्रिय होना चाहिए। यह मान डिफ़ॉल्ट विशेषता
shadowexpireमें संग्रहीत है, मान-1साथ। आपके सर्वर कॉन्फ़िगरेशन के आधार पर,shadowexpireमूल्यों का असंख्य धारण कर सकता है, यहाँ तक कि दिनांक भी संभव हैं। यदि कोई उपयोगकर्ता निष्क्रिय है, तोshadowexpire1होगा। यह सुनिश्चित करने के लिए कि हमें उन सभी उपयोगकर्ताओं को छोड़कर जो वास्तव में निष्क्रिय हैं, हमshadowexpire = -1पर फ़िल्टर करने का विकल्प नहीं चुनते हैं। इसके बजाय हम कहते हैं कि हम उन्हें निष्क्रिय नहीं करना चाहते हैं।
$filter= "(!(shadowexpire=1))"; //NOT is represented with "!"
अब सबसे दिलचस्प हिस्सा: सभी तीन उदाहरणों को मिलाएं। हम इसे कोष्ठक, और, या नहीं भाव के साथ कर सकते हैं
$filter= "(&(postaladdress=Amsterdam)(uid=a*)(!(shadowexpire=1)))";
अंत में, हम "or |" का उपयोग करके एक कथन में निर्माण कर सकते हैं, उदाहरण के लिए यदि हम चाहते हैं कि सभी उपयोगकर्ता "a" या "b" से शुरू करें
$filter= "(|(uid=a*)(uid=n*))";
आप अंतहीन संयोजन कर सकते हैं और काफी प्रभावशाली फिल्टर बना सकते हैं, कोशिश करने का आनंद लें!