অ্যাক্টিভ ডিরেক্টরি মাধ্যমে LDAP ব্যবহার করে পিএইচপিতে প্রমাণীকরণ


104

আমি পিএইচপি (সক্রিয় ডিরেক্টরি সরবরাহকারী হিসাবে) এর সাথে এলডিএপি মাধ্যমে ব্যবহারকারীদের প্রমাণীকরণের একটি উপায় খুঁজছি। আদর্শভাবে, এটি আইআইএস 7 এ চালাতে সক্ষম হওয়া উচিত ( অ্যাডএলডিএপি এটি অ্যাপাচে করে)। সাফল্যের সাথে কেউ কি এমন কিছু করেছিলেন?

  • সম্পাদনা করুন: আমি কোড সহ একটি লাইব্রেরি / শ্রেণি পছন্দ করবো যা যেতে প্রস্তুত ... চাকাটি উদ্ভাবন করা যখন কেউ ইতিমধ্যে এটি করে ফেলেছে তখন তা নির্বোধ হবে।

আমি মনে করি ড্রুপালের সেই জন্য একটি মডিউল রয়েছে
রেডবেন

উত্তর:


167

যখন আপনার কেবলমাত্র দুটি লাইনের কোড দরকার তখন একটি সম্পূর্ণ লাইব্রেরি আমদানি অকার্যকর বলে মনে হয় ...

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

43
প্রদত্ত পাসওয়ার্ডটি ফাঁকা থাকলে AD এর কিছু ইনস্টলেশন সাফল্যের সাথে আবদ্ধ হবে। এই জন্য দেখুন! প্রমাণীকরণের চেষ্টা করার আগে আপনাকে খালি খালি পাসওয়ার্ড নিশ্চিত করতে হবে।
diolemo

@ ডিওলেমো পাসওয়ার্ড খালি কিনা তা পরীক্ষা করেই কি এটি প্রতিরোধের কোনও উপায় আছে?
নফতালি ওরফে নীল

@ নিল আপনি ldap_set_optionএটিকে অন্যরকম আচরণ করার জন্য ব্যবহার করতে সক্ষম হতে পারেন । সম্ভবত প্রোটোকল সংস্করণ সেট? আপনি পরীক্ষা করতে হবে। আমি ব্যক্তিগতভাবে আপনাকে কেবল নিরাপদ থাকার জন্য আপনাকে খালি পাসওয়ার্ড চেক করার পরামর্শ দিচ্ছি।
diolemo


বেনাম সম্পাদককে: না, আমার জ্ঞানের কাছে, ইনপুট স্যানিটাইজেশন এখানে প্রয়োজনীয় নয় যেমন ldap_bindএটি পরিচালনা করবে এবং বিশেষ চরিত্রগুলি কোনও সমস্যা নয়।
সিজেজোজ

14

আপনি ভাববেন যে কেবল অ্যাক্টিভ ডিরেক্টরিতে কোনও ব্যবহারকারীকে প্রমাণীকরণ করা লাইব্রেরির প্রয়োজন ছাড়াই পিএইচপি-তে এলডিএপি ব্যবহার করা একটি সহজ সাধারণ প্রক্রিয়া হবে। তবে এমন অনেকগুলি বিষয় রয়েছে যা এটিকে দ্রুত জটিল করে তুলতে পারে:

  • আপনাকে অবশ্যই ইনপুটটি বৈধ করতে হবে। একটি ফাঁকা ব্যবহারকারীর নাম / পাসওয়ার্ড অন্যথায় পাস করবে।
  • বাঁধার সময় আপনার ব্যবহারকারীর নাম / পাসওয়ার্ড সঠিকভাবে এনকোড করা উচিত তা নিশ্চিত করা উচিত।
  • আপনার টিএলএস ব্যবহার করে সংযোগটি এনক্রিপ্ট করা উচিত।
  • অপ্রয়োজনীয়তার জন্য পৃথক এলডিএপি সার্ভার ব্যবহার করা যদি কোনওটি ডাউন থাকে।
  • প্রমাণীকরণ ব্যর্থ হলে একটি তথ্যবহুল ত্রুটি বার্তা পাওয়া।

উপরোক্ত সমর্থন করে একটি এলডিএপি লাইব্রেরি ব্যবহার করা বেশিরভাগ ক্ষেত্রেই এটি সহজতর। আমি শেষ পর্যন্ত আমার নিজস্ব লাইব্রেরি ঘূর্ণায়মান শেষ করেছি যা উপরের সমস্ত বিষয়গুলি পরিচালনা করে: এলডিপটুলস (ভাল, কেবল প্রমাণীকরণের জন্য নয়, এটি আরও অনেক কিছু করতে পারে)। এটি নিম্নলিখিতগুলির মতো ব্যবহার করা যেতে পারে:

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)
  • যদি কোনটি নিচে থাকে তবে বিকল্প এলডিএপি সার্ভার ব্যবহার করে দেখুন।
  • TLS ব্যবহার করে প্রমাণীকরণের অনুরোধটি এনক্রিপ্ট করুন।
  • এটি ব্যর্থ হলে অতিরিক্ত তথ্য সরবরাহ করুন (যেমন লক / অক্ষম অ্যাকাউন্ট, ইত্যাদি)

এটি করার জন্য অন্যান্য লাইব্রেরি রয়েছে (যেমন অ্যাডলডাপ ২)। তবে, আমি কিছু অতিরিক্ত তথ্য সরবরাহ করার পক্ষে যথেষ্ট বাধ্য হয়েছি বলে সর্বাধিক আপ-ভোট দেওয়া উত্তরটি আসলে কোনও ইনপুট বৈধতা না করা এবং টিএলএস ব্যবহার না করে নির্ভর করা এক সুরক্ষা ঝুঁকি।


1
দ্বারা LDAP সংযোগ জন্য TLS এর STARTTLS পক্ষে অবচিত হয়েছে: openldap.org/faq/data/cache/605.html
জেনল্যান্ড 18

2
@ জেনলর্ড ldaps://এই সংযোগের জন্য ফর্ম্যাটটি ব্যবহার করে হ্রাস করা হয়েছে। আমার উদাহরণে, আপনি নির্দিষ্ট করার সময় setUseTls(true)এটি ldap://ফর্ম্যাট ব্যবহার করে এবং তারপরে স্টার্টটিএলএস ব্যবহার করে ldap_start_tls($connection)। সুতরাং টিএলএস নিজেই অবহেলিত হয়নি, কেবল ব্যবহার করে ldaps://সংযুক্ত হচ্ছে (যা আসলে সম্পূর্ণ আলাদা বন্দরের সাথে এলডিএপ সংযোগ করে)।
চাদ সিকোরা

12

আমি ldap_bind () এ ব্যবহারকারীর শংসাপত্রগুলি কেবল পাস করেই এটি করি।

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

যদি অ্যাকাউন্টটি এলডিএপিতে বাঁধাই করতে পারে তবে এটি বৈধ; যদি এটি না পারে তবে তা নয়। আপনি যা করছেন তার সবই যদি প্রমাণীকরণ হয় (অ্যাকাউন্ট পরিচালনা নয়) তবে আমি লাইব্রেরির প্রয়োজনীয়তা দেখতে পাচ্ছি না।


9

আমি Zend_Ldap ক্লাসটি পছন্দ করি , আপনি জেন্ডার ফ্রেমওয়ার্ক ছাড়া আপনার প্রকল্পে এই ক্লাসটি ব্যবহার করতে পারেন।


1
আমি উপরোক্ত বাস্তবায়ন করার ঝামেলার মধ্য দিয়ে গিয়েছিলাম তা প্রমাণ করার জন্য নয় man আমি zend.auth.adapter.ldap
vdidxho

6

পিএইচপির লাইব্রেরি রয়েছে: http://ca.php.net/ldap

পিয়ারেও বেশ কয়েকটি প্যাকেজ রয়েছে: http://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

আমিও ব্যবহার করিনি, তবে আমি এক পর্যায়ে যাচ্ছিলাম এবং তাদের মনে হয়েছিল তাদের কাজ করা উচিত।


5

যারা সম্পূর্ণ উদাহরণটির সন্ধান করছেন তাদের জন্য http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ দেখুন

আমি এটি একটি উইন্ডোজ সার্ভার 2003 ওয়েব সার্ভার (আইআইএস 6) এবং উইন্ডোজ সার্ভার 2012 আইআইএস 8 চলমান এন্টারপ্রাইজ থেকে উইন্ডোজ সার্ভার 2003 এবং উইন্ডোজ সার্ভার 2008 আর 2 ডোমেন নিয়ন্ত্রকদের সাথে সংযোগের পরীক্ষা করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.