2008-10-05 14 views
93

के माध्यम से एलडीएपी का उपयोग करके PHP में प्रमाणीकरण करना मैं PHP के साथ एलडीएपी के माध्यम से उपयोगकर्ताओं को प्रमाणित करने का एक तरीका ढूंढ रहा हूं (सक्रिय निर्देशिका प्रदाता होने के साथ)। आदर्श रूप से, यह आईआईएस 7 (adLDAP अपाचे पर करता है) पर चलाने में सक्षम होना चाहिए। किसी ने भी सफलता के साथ कुछ भी किया था?सक्रिय निर्देशिका

  • संपादित करें: मैं एक पुस्तकालय/कक्षा को कोड के साथ पसंद करूंगा जो जाने के लिए तैयार है ... जब किसी ने पहले ही ऐसा किया है तो पहिया का आविष्कार करना मूर्खतापूर्ण होगा। http://ca.php.net/ldap

    नाशपाती भी संकुल की एक संख्या है:

+0

मुझे लगता है कि ड्रूपल के पास – redben

उत्तर

147

एक पूरी पुस्तकालय का आयात अक्षम लगता है जब आप सभी की जरूरत अनिवार्य रूप से कोड की दो पंक्तियाँ है ...

$ldap = ldap_connect("ldap.example.com"); 
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) { 
    // log them in! 
} else { 
    // error message 
} 
+37

के लिए एक मॉड्यूल है, यदि प्रदान किया गया पासवर्ड खाली है तो एडी की कुछ स्थापनाएं सफलतापूर्वक बाध्य होंगी। इसके लिए बाहर देखो! प्रमाणित करने का प्रयास करने से पहले आपको एक गैर-खाली पासवर्ड सुनिश्चित करने की आवश्यकता हो सकती है। – diolemo

+0

@diolemo क्या पासवर्ड खाली है या नहीं, यह जांचने के बिना इसे रोकने का कोई तरीका है? – Neal

+0

@Neal आप इसे एक अलग तरीके से व्यवहार करने के लिए 'ldap_set_option' का उपयोग करने में सक्षम हो सकते हैं। शायद प्रोटोकॉल संस्करण स्थापित कर रहे हैं? आपको प्रयोग करना होगा। मैं व्यक्तिगत रूप से सुझाव दूंगा कि आप सुरक्षित होने के लिए वैसे भी एक खाली पासवर्ड की जांच करें। – diolemo

6

पीएचपी पुस्तकालयों है http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

मैं या तो उपयोग नहीं किया है, लेकिन मैं एक बिंदु पर जा रहा था और वे जैसे वे काम करना चाहिए लग रहा था ।

8

मुझे कक्षा पसंद है, आप ज़ेंड फ्रेमवर्क के बिना, अपनी परियोजना में केवल इस कक्षा का उपयोग कर सकते हैं।

11

मैं इसे उपयोगकर्ता प्रमाण-पत्रों को ldap_bind() में पास करके बस करता हूं।

http://php.net/manual/en/function.ldap-bind.php

खाता LDAP करने के लिए बाध्य कर सकते हैं, यह मान्य नहीं है; अगर ऐसा नहीं हो सकता है, तो यह नहीं है। यदि आप जो भी कर रहे हैं वह प्रमाणीकरण है (खाता प्रबंधन नहीं), मुझे लाइब्रेरी की आवश्यकता दिखाई नहीं दे रही है।

5

http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ की जाँच पूर्ण उदाहरण के लिए देख रहे लोगों के लिए।

मैं इस एक विंडोज सर्वर 2003 वेब सर्वर (IIS6) से दोनों Windows सर्वर से कनेक्ट होने में 2003 और Windows Server 2008 R2 डोमेन नियंत्रकों का परीक्षण किया है और एक खिड़कियों से सर्वर 2012 उद्यम चल रहा IIS 8.

11

आपको लगता है कि लगता होगा सक्रिय निर्देशिका में उपयोगकर्ता को प्रमाणीकृत करना लाइब्रेरी की आवश्यकता के बिना PHP में एलडीएपी का उपयोग करके एक बहुत ही सरल प्रक्रिया होगी। लेकिन ऐसी कई चीजें हैं जो इसे बहुत तेज़ी से जटिल कर सकती हैं:

  • आपको इनपुट को मान्य करना होगा। एक खाली उपयोगकर्ता नाम/पासवर्ड अन्यथा पास होगा।
  • आपको यह सुनिश्चित करना चाहिए कि उपयोगकर्ता नाम/पासवर्ड बाध्यकारी होने पर उचित रूप से एन्कोड किया गया हो।
  • आपको टीएलएस का उपयोग कर कनेक्शन एन्क्रिप्ट करना चाहिए।
  • किसी के नीचे होने पर रिडंडेंसी के लिए अलग एलडीएपी सर्वर का उपयोग करना।
  • प्रमाणीकरण विफल होने पर एक सूचनात्मक त्रुटि संदेश प्राप्त करना।

अधिकांश मामलों में उपरोक्त समर्थन देने वाली एलडीएपी लाइब्रेरी का उपयोग करना वास्तव में आसान है। आखिर में मैंने अपनी खुद की लाइब्रेरी को घुमाया जो सभी उपरोक्त बिंदुओं को संभालता है: 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... 
} 

प्रमाणित कॉल ऊपर होगा:

  • मान्य है कि न तो उपयोगकर्ता नाम या पासवर्ड रिक्त है।
  • सुनिश्चित करें कि उपयोगकर्ता नाम/पासवर्ड ठीक से एन्कोड किया गया है (डिफ़ॉल्ट रूप से यूटीएफ -8)
  • किसी के नीचे होने पर वैकल्पिक एलडीएपी सर्वर आज़माएं।
  • टीएलएस का उपयोग कर प्रमाणीकरण अनुरोध एन्क्रिप्ट करें।
  • में अतिरिक्त जानकारी अगर यह विफल रहा है (आदि यानी। लॉक/अक्षम किए गए खाते,) प्रदान करें

(इस तरह के Adldap2 के रूप में) भी यह करने के लिए अन्य पुस्तकालयों रहे हैं। हालांकि, मुझे कुछ अतिरिक्त जानकारी प्रदान करने के लिए पर्याप्त मजबूर होना पड़ा क्योंकि सबसे अधिक वोट देने वाला उत्तर वास्तव में कोई सुरक्षा सत्यापन नहीं है और टीएलएस का उपयोग नहीं कर रहा है।

+1

एलडीएपी कनेक्शन के लिए, टीएलएस को स्टार्ट टीएलएस के पक्ष में बहिष्कृत कर दिया गया है: http://www.openldap.org/faq /data/cache/605.html। – zenlord

+1

@zenlord कनेक्शन के लिए 'ldaps: //' प्रारूप का उपयोग बहिष्कृत किया गया है। मेरे उदाहरण में, जब आप 'setUseTls (true)' निर्दिष्ट करते हैं, तो यह 'ldap: //' प्रारूप का उपयोग करता है और फिर 'ldap_start_tls ($ कनेक्शन)' का उपयोग कर स्टार्ट टीएलएस जारी करता है। तो टीएलएस को खुद को हटा दिया नहीं गया है, बस 'ldaps: //' (जो वास्तव में एक पूरी तरह से अलग बंदरगाह पर एलडीएपी से कनेक्ट होता है) का उपयोग कर कनेक्ट कर रहा है। – ChadSikorra