2008-09-17 8 views
1

ich den folgenden Code haben:So lesen Sie Active Directory-Gruppenmitgliedschaft von PHP/IIS mit COM?

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

Wenn ich es von einer Eingabeaufforderung ausführen, läuft es gut. Wenn es unter IIS/PHP/ISAPI ausgeführt wird, rastet es ein.

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 wird für Windows-Authentifizierung (nicht anonym, nicht einfach, kein digest) konfiguriert und ich als der Benutzer, wie die Eingabeaufforderung zu verbinden. Ich kann keine spezifischen Fehler in den IIS-Protokolldateien oder im Ereignisprotokoll finden.

Der Hauptzweck dieser Übung besteht darin, keine Benutzeranmeldeinformationen in meinem Skript beizubehalten und sich auf die IIS-Authentifizierung zu verlassen, um sie an das aktive Verzeichnis weiterzuleiten. Ich verstehe, dass Sie LDAP verwenden können, um dasselbe zu erreichen, aber soweit ich weiß, können Anmeldeinformationen nicht weitergegeben werden.

Vielleicht ist es in irgendeiner Weise mit dem Fehler verbunden, den ich bekomme, wenn ich versuche, es nach ASP zu portieren. Ich erhalte den Fehler 80072020 (den ich gerade suche).

Die Ereignisprotokolle zeigen nichts Außergewöhnliches. Keine Warnungen, keine Fehler. Die vollständige Sicherheitsüberwachung ist aktiviert (Erfolg und Fehlschlag für jedes Element in der Sicherheitsrichtlinie) und zeigt erfolgreiche Windows-Anmeldungen für jeden Benutzer, der sich für die Webseite authentifiziert (was erwartet wird).

Antwort

2

Da Sie die Windows-Authentifizierung verwenden In IIS haben Sie möglicherweise einige Sicherheitsereignisse im Windows-Ereignisprotokoll. Ich würde das Ereignisprotokoll auf Sicherheitsereignisse sowie Anwendungsereignisse überprüfen und sehen, ob Sie irgendeine Art von Berechtigungsproblemen treffen.

Da Sie im Grunde nur über LDAP mit AD kommunizieren, könnten Sie die Verwendung einer nativen LDAP-Bibliothek für PHP anstelle einer COM in Betracht ziehen.

Sie müssen die Erweiterung wahrscheinlich in Ihrer php.ini aktivieren. Sehenswert wahrscheinlich.

0

Nun, wenn Sie LDAP verwenden möchten, lassen Sie mich Ihnen an den LDAP-Authentifizierungscode verweisen wir für Maia Mailguard verwenden: suchen Sie nach dem lauth_ldap

benannte Funktion finde ich es ldap Version 3 erfordert, so müssen Sie setze diesen Parameter für ldap. Um das Kennwort zu überprüfen, verwenden wir die LDAP-Bindefunktion, um den LDAP-Server authentifizieren zu lassen.

0

Ich bin kein AD/COM/IIS-Experte, aber es könnte ein Berechtigungsproblem sein. Wenn beispielsweise der Benutzer IUSR_Computername keinen gültigen Zugriff innerhalb des Verzeichnisses hat oder Sie als bestimmter Benutzer nicht verbindlich sind?

Die Alarmglocke für mich ist die Tatsache, es läuft ok von der Befehlszeile (z. B. läuft mit Ihren Berechtigungen) aber scheitert an IIS (z. B. nicht Ihre Berechtigungen).

+0

Das IUSR-Konto wird in diesem Szenario nicht verwendet. Tatsächlich kann ich eine Verbindung zu einer Datenbank herstellen und die Anmeldeinformationen (odbc_connect in PHP) weitergeben, so dass ich Beweise dafür habe, dass der Authentifizierungsteil funktioniert. – Martin

2

Es scheint jetzt zu arbeiten.

Ich aktiviert "Computer für Delegierung vertrauen" für das Computerobjekt in Active Directory. Normalerweise kann IIS Sie nicht authentifizieren und anschließend Sie im Netzwerk (in meinem Fall an einen Domänencontroller zur Abfrage von Active Directory) imitieren, ohne dass die Delegierungsvertrauensstellung aktiviert ist.

Sie müssen nur sicher sein, dass die Authentifizierung mit Kerberos und nicht mit NTLM oder einer anderen Digest-Authentifizierung erfolgt, da der Digest nicht als Identitätswechsel-Token verwendet wird.

Es repariert sowohl meine PHP-und ASP-Skripte.