2011-12-06 10 views
8

Quello che sto cercando di fare:disabilitare il login Prompt mod_auth_sspi_1.0.4-2.2.2

  • creare una home page sulla intranet della nostra azienda che afferra automaticamente connesso in Windows nome utente della persona di visione la pagina senza alla persona che viene richiesta di inserire queste credenziali quando la pagina viene caricata.

  • Attualmente, voglio solo prendere il nome utente locale, poiché ci vorrà un po 'di tempo prima che i nostri IT ottengano una configurazione di dominio. Ad esempio, in questo momento vorrei che acquisisse "(Nome PC) \ windows.user.name" senza alcun prompt.

Ambiente:

  • Apache 2.2.21 su Windows 7 x64 (sarà su CentOS una volta che è in produzione).

  • PHP 5.3.8 (VC9-ZTS).

  • Internet Explorer 9.0.8xe Firefox 6.0.2 (si preoccuperà più tardi di Chrome).

  • La pagina di test corrente è solo uno script PHP che chiama print_r ($ _SERVER).

  • Per semplificare le cose, la directory su cui sto verificando non è un VirtualHost.

passi che ho preso finora:

  • scaricati mod_sspi_1.0.4-2.2.2 da SourceForge e estratto mod_auth_sspi.so alla Moduli Apache directory.

  • Aggiunta la dichiarazione del modulo:

    LoadModule sspi_auth_module/mod_auth_sspi.so

  • Aggiunto la definizione directory:

    AllowOverride None Opzioni Nessuna Ordinare consentire, negare Consenti da tutti

    AuthName "My Intranet" 
    AuthType SSPI 
    SSPIAuth On 
    SSPIAuthoritative Off 
    
    require valid-user 
    

  • abilitato l'autenticazione integrata in Firefox andando su about: config e impostare network.automatic-NTLM-auth.trusted-uris al percorso URL assoluto dello script PHP poi riavviato Firefox.

  • Non ho ancora eseguito il passaggio equivalente in IE ma lo farò una volta che Firefox funzionerà poiché è il nostro browser principale supportato internamente.

  • Apache riavviato e ha tentato di caricare lo script PHP di prova.

Il risultato:

  • sia in IE e Firefox, ottengo richiamato per un username e una password prima la pagina viene caricata. Non voglio questo prompt. Voglio che il nome utente venga rilevato automaticamente senza un prompt.

Risoluzione dei problemi finora:

  • Ho provato in bicicletta attraverso le varie opzioni SSPI, ad esempio authritative on/off e quant'altro. Nessun effetto.

  • Il prompt non viene più visualizzato se rimuovo "require valid-user", ma non viene passato neanche il nome utente (non è NULL, semplicemente non è impostato nel periodo dell'array).

  • Se si preme "Annulla" nel prompt, viene visualizzata la pagina standard "Richiesta di autenticazione".

  • Se si immette un nome utente non valido o il nome utente corretto ma con la password errata, la pagina verrà caricata ma il nome utente sarà "(Nome PC) \ Ospite".

  • Se si immette il nome utente/password corretti, viene visualizzato il nome utente anziché Guest.

  • Dopo aver immesso un nome utente/password in IE o Firefox, il browser memorizza il nome utente nella pagina successiva fino a quando non svuoto la cache delle password memorizzate o riavvio il browser.

  • Ho passato le ultime 3 ore a cercare su Google e indovinare a caso. Zero successo. Ho trovato alcuni post sui forum isolati di persone che facevano questa domanda, ma o sono rimasti senza risposta o hanno offerto soluzioni che ho già provato senza successo.

Anche in questo caso, quello che voglio è per la pagina per caricare, senza alcun sollecito, e visualizzare il nome utente attualmente connesso di Windows nell'output array $ _SERVER.

Per quanto posso capire, questo è: un problema di configurazione di Windows, un problema di configurazione di Apache o un problema di configurazione del browser. Oltre a questo, sono fresco di idee.

Sarei molto grato per qualsiasi aiuto tu possa offrire. Grazie!

--Kris

+0

Spiacente, non ho letto interamente quanto sopra, stai lavorando su una stazione Windows. – ehime

risposta

7

Ci sono voluti un paio di giorni, ma alla fine l'ho capito da solo. Apparentemente, i vari documenti ed esercitazioni là fuori che descrivono Firefox riguardo: le impostazioni di configurazione sono sbagliate. Sostengono che l'URI completo, incluso il prefisso del protocollo, deve essere incluso. A quanto pare, l'esatto contrario è vero.

Come uno scatto casuale al buio, ho provato a impostarlo su "localhost" (il dominio su cui è in esecuzione il server di test). E voilà! Questo l'ha risolto! "http: // localhost", d'altra parte, ha causato l'interruzione.

Una volta che ho funzionato in Firefox, dopo aver verificato che la configurazione lato server era corretta, applicarla a IE e Chrome era un gioco da ragazzi. Per IE, ho appena aggiunto "http: // localhost" (in questo caso, si desidera il prefisso del protocollo) alla zona "Intranet". E poiché Chrome utilizza le stesse impostazioni di rete utilizzate da IE, questo passaggio ha funzionato per entrambi i browser.

Per quanto riguarda la configurazione lato server, sembra che l'abbia avuto fin dall'inizio. Sono stato in grado di semplificare un po ', però, in modo davvero tutto il necessario nel blocco directory è questo:

AuthName "Whatever you want to call your intranet" 
AuthType SSPI 
SSPIAuth On 

require valid-user 

Con questa impostazione, se si punta a uno script PHP facendo un print_r ($ _SERVER), il output conterrà qualcosa di simile:

[REMOTE_USER] => dev-kdc-pc01\kris.craig 
[AUTH_TYPE] => NTLM 
[PHP_AUTH_USER] => dev-kdc-pc01\kris.craig 

Se si vuole sbarazzarsi della parte del dominio (vale a dire il "dev-KDC-PC01 \"), è possibile analizzarlo in PHP o aggiungere questa riga al la tua roba SSPI nel blocco di directory in httpd.conf menzionato sopra:

SSPIOmitDomain On 

Si prega di notare che ho solo provato questo su un sistema Windows in cui il server web Apache era in esecuzione su localhost. Non l'ho ancora testato in una situazione in cui il server Apache è in esecuzione su Linux, anche se questo non dovrebbe avere alcun impatto sui risultati poiché il server sta solo accettando qualunque sia il browser che lo invia. Ciò richiede anche che il client esegua Windows o qualche altro ambiente compatibile con SSPI. Non ho ancora deciso come farlo funzionare per i dipendenti che utilizzano Mac.

Si noti inoltre che l'ho verificato con successo su una rete che non ha attualmente un dominio configurato. Secondo gli articoli pubblicati altrove, il comportamento dovrebbe essere identico su una workstation che è un membro di un dominio.

Spero che questo aiuti! Grazie!

+0

Provato tutto, anche la tua soluzione non mi aiuta ... – Somnium

0

Questa potrebbe essere una risposta parziale.

BOOL WINAPI GetUserName(
    __out LPTSTR lpBuffer, 
    __inout LPDWORD lpnSize 
); 

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

Sembra che è possibile recuperare le informazioni di sistema utilizzando questa, l'altra metà potrebbe essere automatizzando utilizzando Perl o Python per raschiare le informazioni, quindi post it a PHP.

Ecco lo schema sul recupero di SysInfo in Windows.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

Onestamente questa è una cosa abbastanza facile da fare con PECL/PAM se si utilizza Linux.

+0

Questo non dovrebbe essere in esecuzione sul lato client? Alla fine il server eseguirà CentOS e in pratica accetterà semplicemente qualsiasi cosa il browser rivendichi come credenziali. –