आपको लगता है कि बस एक सक्रिय निर्देशिका में एक उपयोगकर्ता को प्रमाणित करने के लिए एक पुस्तकालय की आवश्यकता के बिना PHP में LDAP का उपयोग करते हुए एक बहुत ही सरल प्रक्रिया होगी। लेकिन बहुत सी चीजें हैं जो इसे बहुत तेजी से जटिल कर सकती हैं:
- आपको इनपुट को मान्य करना होगा। एक खाली उपयोगकर्ता नाम / पासवर्ड अन्यथा पास होगा।
- आपको यह सुनिश्चित करना चाहिए कि बाध्यकारी करते समय उपयोगकर्ता नाम / पासवर्ड ठीक से एन्कोडेड है।
- आपको टीएलएस का उपयोग करके कनेक्शन को एन्क्रिप्ट करना चाहिए।
- यदि कोई डाउन है तो अतिरेक के लिए अलग LDAP सर्वर का उपयोग करना।
- प्रमाणीकरण विफल होने पर सूचनात्मक त्रुटि संदेश प्राप्त करना।
उपरोक्त मामलों में LDAP लाइब्रेरी का उपयोग करना वास्तव में अधिकांश मामलों में आसान है। मैंने अंततः अपनी खुद की लाइब्रेरी को समाप्त कर दिया, जो उपरोक्त सभी बिंदुओं को संभालती है: LdapTools (खैर, केवल प्रमाणीकरण के लिए नहीं, यह बहुत अधिक कर सकता है)। यह निम्नलिखित की तरह इस्तेमाल किया जा सकता है:
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
ऊपर दी गई प्रामाणिक कॉल:
- मान्य करें कि न तो उपयोगकर्ता नाम या पासवर्ड खाली है।
- सुनिश्चित करें कि उपयोगकर्ता नाम / पासवर्ड ठीक से एन्कोडेड है (डिफ़ॉल्ट रूप से UTF-8)
- वैकल्पिक एलडीएपी सर्वर एक के नीचे होने की स्थिति में प्रयास करें।
- टीएलएस का उपयोग करके प्रमाणीकरण अनुरोध को एन्क्रिप्ट करें।
- यदि यह विफल (यानी बंद / अक्षम खाता, आदि) अतिरिक्त जानकारी प्रदान करें
ऐसा करने के लिए अन्य पुस्तकालय भी हैं (जैसे कि Adldap2)। हालांकि, मैंने कुछ अतिरिक्त जानकारी प्रदान करने के लिए पर्याप्त मजबूर महसूस किया क्योंकि सबसे अधिक मतदान का जवाब वास्तव में एक सुरक्षा जोखिम है जिस पर कोई इनपुट सत्यापन नहीं किया गया है और टीएलएस का उपयोग नहीं किया गया है।