¿Cómo leer la membresía del grupo de Active Directory desde PHP/IIS usando COM?

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo el siguiente código:

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

Cuando lo ejecuto desde el símbolo del sistema, funciona bien.Cuando se ejecuta bajo IIS/PHP/ISAPI, vomita.

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 está configurado para la autenticación de Windows (no anónima, no básica, sin resumen) y me estoy conectando como el mismo usuario que en el símbolo del sistema.No puedo encontrar ningún error específico en los archivos de registro de IIS o en el registro de eventos.

El objetivo principal de este ejercicio es abstenerme de mantener las credenciales de usuario en mi script y confiar en la autenticación de IIS para pasarlas al directorio activo.Entiendo que puede usar LDAP para lograr lo mismo, pero hasta donde yo sé, las credenciales no se pueden pasar.

Quizás esté relacionado de alguna manera con el error que aparece cuando intento portarlo a ASP.Recibo el error 80072020 (que estoy buscando actualmente).

Los registros de eventos no muestran nada fuera de lo común.Sin advertencias, sin errores.La auditoría de seguridad completa está habilitada (éxito y fracaso en cada elemento de la política de seguridad) y muestra inicios de sesión exitosos en Windows para cada usuario que autentico en la página web (lo cual es lo esperado).

¿Fue útil?

Solución

Dado que está utilizando la autenticación de Windows en IIS, es posible que tenga algunos eventos de seguridad en el registro de eventos de Windows.Verificaría el registro de eventos para eventos de seguridad, así como eventos de aplicación, y vería si tiene algún tipo de problema de permisos.

Además, dado que básicamente solo te estás comunicando con AD a través de LDAP... podrías considerar usar una biblioteca LDAP nativa para PHP en lugar de COM.

Probablemente tendrás que habilitar la extensión en tu php.ini.Probablemente vale la pena mirarlo.

Otros consejos

Parece estar funcionando ahora.

Habilité "Confiar en esta computadora para delegar" para el objeto de computadora en Active Directory.Normalmente, IIS no puede autenticarlo y luego hacerse pasar por usted a través de la red (en mi caso, ante un controlador de dominio para consultar Active Directory) sin la confianza de delegación habilitada.

Solo debe asegurarse de que se autentique utilizando Kerberos y no NTLM o alguna otra autenticación implícita porque no se confía en que el resumen se utilice como token de suplantación.

Arregló mis scripts PHP y ASP.

Bueno, si quieres usar LDAP, déjame indicarte el código de autenticación LDAP que usamos para Maia Mailguard:busca la función nombrada lauth_ldap

Creo que requiere ldap versión 3, por lo que debes configurar ese parámetro para ldap.Para verificar la contraseña, utilizamos la función de enlace ldap para permitir que el servidor ldap se autentique.

No soy un experto en AD/COM/IIS, pero podría ser un problema de permisos.por ejemplo, el usuario IUSR_computername no tiene acceso aplicable dentro del directorio o no está vinculado como usuario específico.

La alarma para mí es el hecho de que se ejecuta bien desde la línea de comandos (p. ej.ejecutándose con sus permisos) pero falla en IIS (p. ej.no sus permisos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top