Come leggere l'appartenenza al gruppo Active Directory da PHP/IIS utilizzando COM?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Ho il codice seguente:

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

Quando lo eseguo da un prompt dei comandi, funziona correttamente.Quando viene eseguito in 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 è configurato per l'autenticazione di Windows (non anonimo, non di base, non digest) e mi connetto come lo stesso utente del prompt dei comandi.Non riesco a trovare errori specifici nei file di registro IIS o nel registro eventi.

Lo scopo principale di questo esercizio è astenersi dal conservare le credenziali dell'utente nello script e fare affidamento sull'autenticazione IIS per passarle alla directory attiva.Capisco che puoi utilizzare LDAP per ottenere la stessa cosa, ma per quanto ne so le credenziali non possono essere trasmesse.

Forse è in qualche modo legato all'errore che ricevo quando provo a portarlo su ASP.Ottengo l'errore 80072020 (che sto attualmente cercando).

I registri degli eventi non mostrano nulla di straordinario.Nessun avviso, nessun errore.È abilitato il controllo di sicurezza completo (successo e fallimento su ogni elemento nella politica di sicurezza) e mostra gli accessi a Windows riusciti per ogni utente che autentico rispetto alla pagina Web (come previsto).

È stato utile?

Soluzione

Poiché utilizzi l'autenticazione di Windows in IIS, potresti avere alcuni eventi di sicurezza nel registro eventi di Windows.Vorrei controllare il registro eventi per gli eventi di sicurezza e gli eventi dell'applicazione per vedere se stai riscontrando qualche tipo di problema di autorizzazione.

Inoltre, poiché fondamentalmente stai comunicando con AD tramite LDAP... potresti valutare l'utilizzo di una libreria LDAP nativa per PHP anziché una COM.

Dovrai abilitare l'estensione probabilmente nel tuo php.ini.Probabilmente vale la pena guardarlo.

Altri suggerimenti

Sembra che funzioni ora.

Ho abilitato "Considera attendibile questo computer per la delega" per l'oggetto computer in Active Directory.Normalmente IIS non può autenticarti e successivamente rappresentarti attraverso la rete (nel mio caso su un controller di dominio per interrogare Active Directory) senza l'attendibilità della delega abilitata.

Devi solo essere sicuro che si stia autenticando utilizzando Kerberos e non NTLM o qualche altra autenticazione digest perché il digest non è affidabile da utilizzare come token di rappresentazione.

Ha corretto sia i miei script PHP che ASP.

Bene, se vuoi utilizzare LDAP, lascia che ti indichi il codice di autenticazione LDAP che utilizziamo per Maia Mailguard:cercare la funzione denominata lauth_ldap

Penso che richieda ldap versione 3, quindi devi impostare quel parametro per ldap.Per verificare la password, utilizziamo la funzione ldap bind per consentire l'autenticazione del server ldap.

Non sono un esperto di AD/COM/IIS, ma potrebbe trattarsi di un problema di permessi.ad esempio, l'utente IUSR_nomecomputer non ha accesso applicabile all'interno della directory o non sei vincolante come utente specifico?

Il campanello d'allarme per me è il fatto che funziona bene dalla riga di comando (ad es.in esecuzione con le tue autorizzazioni) ma fallisce su IIS (ad es.non le tue autorizzazioni).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top