كيفية قراءة عضوية مجموعة الدليل النشط من PHP/IIS باستخدام COM؟

StackOverflow https://stackoverflow.com/questions/84641

  •  01-07-2019
  •  | 
  •  

سؤال

لدي الكود التالي:

$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local");

عندما أقوم بتنفيذه من موجه الأوامر، فإنه يعمل بشكل جيد.عندما يتم تشغيله ضمن IIS/PHP/ISAPI، فإنه يتعطل.

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `LDAP://CN=...[cut]...,DC=local':
An operations error occurred. ' in index.php
Stack trace:
  #0 index.php: com->com('LDAP://CN=...')
  #1 {main} thrown

تم تكوين IIS لمصادقة Windows (لا يوجد مجهول، ولا أساسي، ولا ملخص) وأنا أقوم بالاتصال بنفس المستخدم مثل موجه الأوامر.لا يمكنني العثور على أي أخطاء محددة في ملفات سجل IIS أو سجل الأحداث.

الغرض الرئيسي من هذا التمرين هو الامتناع عن الاحتفاظ ببيانات اعتماد المستخدم في البرنامج النصي الخاص بي والاعتماد على مصادقة IIS لتمريرها إلى الدليل النشط.أدرك أنه يمكنك استخدام LDAP لإنجاز نفس الشيء، ولكن على حد علمي لا يمكن تمرير بيانات الاعتماد.

ربما يكون الأمر مرتبطًا بطريقة ما بالخطأ الذي يظهر لي عندما أحاول نقله إلى ASP.تلقيت الخطأ 80072020 (الذي أبحث عنه حاليًا).

لا تظهر سجلات الأحداث أي شيء خارج عن المألوف.لا توجد تحذيرات، لا أخطاء.يتم تمكين التدقيق الأمني ​​الكامل (النجاح والفشل في كل عنصر في سياسة الأمان)، ويعرض عمليات تسجيل الدخول الناجحة إلى Windows لكل مستخدم أقوم بمصادقته على صفحة الويب (وهو أمر متوقع.)

هل كانت مفيدة؟

المحلول

نظرًا لأنك تستخدم مصادقة Windows في IIS، فقد يكون لديك بعض الأحداث الأمنية في سجل أحداث Windows.أود التحقق من سجل الأحداث بحثًا عن الأحداث الأمنية بالإضافة إلى أحداث التطبيق ومعرفة ما إذا كنت تواجه أي نوع من مشكلات الأذونات.

أيضًا، نظرًا لأنك تتواصل مع AD عبر LDAP... فقد تفكر في استخدام مكتبة LDAP الأصلية لـ PHP بدلاً من COM.

سيتعين عليك تمكين الامتداد على الأرجح في php.ini الخاص بك.يستحق النظر على الأرجح.

نصائح أخرى

يبدو أنها تعمل الآن.

لقد قمت بتمكين "الوثوق بهذا الكمبيوتر للتفويض" لكائن الكمبيوتر في Active Directory.عادةً لا يستطيع IIS مصادقتك ثم انتحال شخصيتك عبر الشبكة (في حالتي إلى وحدة تحكم المجال للاستعلام عن Active Directory) دون تمكين ثقة التفويض.

عليك فقط التأكد من أنه تتم مصادقته باستخدام Kerberos وليس NTLM أو بعض مصادقة الملخص الأخرى لأن الملخص غير موثوق لاستخدامه كرمز مميز لانتحال الهوية.

لقد تم إصلاح كلاً من نصوصي PHP وASP.

حسنًا، إذا كنت تريد استخدام LDAP، دعني أرشدك إلى رمز مصادقة LDAP الذي نستخدمه لـ Maia Mailguard:ابحث عن الوظيفة المسماة laoth_ldap

أعتقد أنه يتطلب الإصدار 3 من ldap، لذا يتعين عليك تعيين هذه المعلمة لـ ldap.للتحقق من كلمة المرور، نستخدم وظيفة ربط ldap للسماح لخادم ldap بالمصادقة.

أنا لست خبيرًا في AD/COM/IIS، ولكن قد تكون هناك مشكلة في الأذونات.على سبيل المثال، لا يتمتع مستخدم IUSR_computername بإمكانية الوصول القابلة للتطبيق داخل الدليل، أو أنك غير ملزم كمستخدم محدد؟

جرس الإنذار بالنسبة لي هو حقيقة أنه يعمل بشكل جيد من سطر الأوامر (على سبيل المثال.يعمل مع أذوناتك) ولكنه يفشل في IIS (على سبيل المثال.وليس أذوناتك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top