Domanda

Cosa sto cercando di fare:

  • Crea una home page sulla intranet della nostra azienda che afferra automaticamente il nome utente di Windows loggato della persona che visualizza la pagina senza La persona viene richiesta di inserire queste credenziali quando la pagina si carica.

  • Attualmente, voglio solo che afferri il nome utente locale, dal momento che ci vorrà un po 'prima che i nostri ragazzi IT ottengano una configurazione del dominio. Ad esempio, in questo momento vorrei che acquisisse il "(PC-NAME) Windows.user.Name" senza suggerimenti.

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.8x e Firefox 6.0.2 (si preoccuperà di Chrome in seguito).

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

  • Per semplificare le cose, la directory su cui sto testando questo non è un host virtual.

Passi che ho preso finora:

  • Scaricato MOD_SSPI_1.0.4-2.2.2 da sourceforge ed estratto mod_auth_ssspi.so nella directory dei moduli Apache.

  • Aggiunta la dichiarazione del modulo:

    Loadmodule sspI_auth_module modules/mod_auth_ssspi.so

  • Aggiunto la definizione della directory:

    AbilitOverride nessuna opzione Nessuna ordine consentire, nega da tutti

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

  • Autenticazione integrata abilitata in Firefox andando a circa: config e impostazione della rete.automatic-ntlm-auth.Trusted-Uris sul percorso URL assoluto dello script PHP, quindi riavviato Firefox.

  • Non ho ancora fatto il passo equivalente in IE, ma una volta che avrò funzionamento Firefox in quanto è il nostro browser supportato principale internamente.

  • Riavviato Apache e tentato di caricare lo script PHP di prova.

Il risultato:

  • In IE e Firefox, mi viene richiesto un nome utente e una password prima che la pagina si carichi. Non voglio quella richiesta. Voglio che il nome utente venga rilevato automaticamente senza un prompt.

Risoluzione dei problemi finora:

  • Ho provato a pedalare attraverso le varie opzioni SSPI, come Authritative On/Off e WhatNot. Nessun effetto.

  • Il prompt non appare più se rimuovo "richiedo l'utente valido", ma il nome utente non è passato, neanche (non è nullo; semplicemente non impostato nel periodo dell'array).

  • Se premo "Annulla" sul prompt, ottengo l'autenticazione standard "richiesta".

  • Se inserisco un nome utente non valido o il nome utente corretto ma con la password sbagliata, la pagina verrà caricato ma il nome utente sarà "(PC-NAME) Guest".

  • Se inserisco il nome utente/password corretto, viene visualizzato il nome utente anziché ospite.

  • Una volta inserito un nome utente/password in IE o Firefox, il browser ricorda che il nome utente sui successivi pagine si carica fino a quando non ho cancellato la cache delle password memorizzate o riavviare il browser.

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

Ancora una volta, quello che voglio è che la pagina si carichi, senza alcun suggerimento, e visualizza il nome utente di Windows attualmente accessibile nell'output di 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. A parte questo, sono appena uscito dalle idee.

Sarei molto grato per qualsiasi aiuto che puoi offrire. Grazie!

--Kris

È stato utile?

Soluzione

Ci sono voluti un paio di giorni, ma alla fine l'ho capito da solo. Apparentemente, i vari documenti e tutorial là fuori che descrivono Firefox su: l'impostazione della configurazione sono sbagliati. Sostengono che l'intero URI, incluso il prefisso del protocollo, deve essere incluso. A quanto pare, è vero il contrario.

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

Una volta fatto funzionare a Firefox, avendo verificato che la configurazione lato server fosse corretta, applicandola 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) nella zona "intranet". E poiché Chrome utilizza le stesse impostazioni di rete utilizzate da IE, quel passaggio ha fatto funzionare per entrambi i browser.

Per quanto riguarda la configurazione sul lato server, sembra che avessi quello fin dall'inizio. Sono stato in grado di semplificarlo un po ', quindi davvero tutto ciò di cui hai bisogno nel blocco della directory è questo:

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

require valid-user

Con questa configurazione, se si indica uno script PHP che esegue una stampa_r ($ _server), l'output conterrà qualcosa del genere:

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

Se vuoi sbarazzarti della parte del dominio (cioè "Dev-KDC-PC01 "), puoi analizzarlo in PHP o aggiungere questa riga alle tue cose SSPI nel blocco di directory in httpd.conf di cui sopra:

SSPIOmitDomain On

Si noti che l'ho testato solo 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 ciò non dovrebbe avere alcun impatto sui risultati poiché il server sta semplicemente accettando qualunque cosa il browser lo invia. Ciò richiede anche che il client stia eseguendo Windows o qualche altro ambiente compatibile con SSP. Non ho ancora determinato come far funzionare questo per i nostri dipendenti che utilizzano Mac.

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

Spero che questo aiuti! Grazie!

Altri suggerimenti

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 tu possa recuperare informazioni sul sistema usando questo, l'altra metà potrebbe automatizzarle usando Perl o Python per raschiare le informazioni, quindi pubblicarle su PHP.

Ecco il profilo 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 stai usando Linux.

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