Domanda

Sono vagamente consapevole del fatto che su un computer collegato a un dominio IE può essere chiesto di inviare alcune intestazioni extra che potrei usare per accedere automaticamente a un'applicazione. Ho apache in esecuzione su un server Windows con mod_php. Mi piacerebbe essere in grado di evitare che l'utente debba accedere se necessario. Ho trovato alcuni link che parlano dei moduli Kerberos e Apache.

http: // www. onlamp.com/pub/a/onlamp/2003/09/11/kerberos.html?page=last https://metacpan.org/pod/Apache2::AuthenNTLM

Dato che sto correndo su Windows, è dimostrato che non è banale installare i moduli Perl o Apache. Ma PHP non ha già accesso alle intestazioni HTTP?

L'ho trovato ma non esegue alcuna autenticazione, mostra solo che PHP è in grado di leggere le intestazioni NTLM. http://siphon9.net/loune/2007/10/ semplice-leggero-NTLM-in-php /

Mi piacerebbe poter avere i miei utenti semplicemente puntare all'applicazione e farli autenticare automaticamente. Qualcuno ha avuto esperienza con questo o è riuscito a farlo funzionare?

Aggiorna Da quando abbiamo pubblicato questa domanda, abbiamo modificato le impostazioni in nginx e php-fcgi ancora in esecuzione su Windows. Apache2 e php-cgi su Windows è probabilmente una delle configurazioni più lente che puoi configurare su Windows. Sembra che Apache potrebbe essere ancora necessario (funziona con php-fcgi) ma preferirei una soluzione nginx.

Inoltre non capisco ancora (e mi piacerebbe essere istruito) perché i plug-in del server HTTP sono necessari e non possiamo avere una soluzione agnostica PHP, web server.

È stato utile?

Soluzione

Tutto ciò che serve è il mod_auth_sspi modulo Apache.

Configurazione di esempio:

AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain mydomain

# Set this if you want to allow access with clients that do not support NTLM, or via proxy from outside. Don't forget to require SSL in this case!
SSPIOfferBasic On

# Set this if you have only one domain and don't want the MYDOMAIN\ prefix on each user name
SSPIOmitDomain On

# AD user names are case-insensitive, so use this for normalization if your application's user names are case-sensitive
SSPIUsernameCase Lower
AuthName "Some text to prompt for domain credentials"
Require valid-user

E non dimenticare che puoi anche utilizzare Firefox per SSO trasparente in un dominio Windows : vai su about: config , cerca network.automatic-ntlm-auth.trusted-uris e inserisci il nome host o FQDN dell'applicazione interna (come myserver o myserver.corp.domain.com). Puoi avere più di una voce, è un elenco separato da virgole.

Altri suggerimenti

Sarei curioso di sapere una soluzione che utilizza OpenID come backend (di sorta) per questo ... Non vedevo nulla che potesse agganciarsi direttamente ad ActiveDirectory quando cercavo su Google (rapidamente). Tuttavia, potrebbe essere abbastanza indolore implementare su HTTP (S) semplice (saresti un fornitore OpenID che controllava le credenziali rispetto al tuo AD locale). Nel migliore dei casi, potresti essere in grado di aggiungere solo un paio di classi alla tua app ed essere spento e funzionante, senza moduli del server web richiesti. C'è un sacco di codice open source là fuori per entrambi i lati di questo, quindi se non altro, vale la pena dare un'occhiata. Se hai esposto il back-end agli utenti (ovvero hai fornito loro URL OpenID), avresti il ??vantaggio aggiuntivo di poter accedere a più dei tuoi siti interni utilizzando queste credenziali. (Esempio: Stack Overflow.)

A parte questo, sarei contrario a farlo in modo che sia richiesto Internet Explorer. Non sono sicuro che questo sia l'obiettivo dal modo in cui hai scritto la domanda, ma a seconda del tuo ambiente IT, mi aspetto che le persone che usano Firefox o Safari (o Opera o ...) siano meno che entusiaste. (Non stai sviluppando prima contro IE, vero? È stato doloroso ogni volta che l'ho fatto.) Questo non vuol dire che non puoi usare questa funzionalità di IE, solo che non dovrebbe essere l'unica opzione . Il link che hai pubblicato afferma che NTLM ha funzionato con più di IE, ma poiché non ho alcuna esperienza con esso, è difficile giudicare quanto funzionerebbe.

Ho avuto un problema simile che dovevo risolvere per la mia organizzazione.

Stavo cercando di usare adLDAP .

Esiste una documentazione sul sito per ottenere un'autenticazione continua anche con Active Directory.

Un'opzione per te è usare CAS (servizio di autenticazione centrale).

Ha una libreria client php.

Collegamento How-to a MS Active Directory: http: // www.ja-sig.org/wiki/display/CASUM/Active+Directory

Avresti bisogno di Apache maven 2.

Per IIS / PHP FCGI, è necessario inviare un'intestazione non autorizzata:

function EnableAuthentication()
{
    $realm = "yoursite";
    header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
    header("HTTP/1.1 401 Unauthorized"); 
    exit;
}

Puoi quindi accedere al nome utente con:

$winuser = 

Per IIS / PHP FCGI, è necessario inviare un'intestazione non autorizzata:

function EnableAuthentication()
{
    $realm = "yoursite";
    header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
    header("HTTP/1.1 401 Unauthorized"); 
    exit;
}

Puoi quindi accedere al nome utente con:

<*>

Mi assicuro quindi che $ winuser sia nel mio database di utenti consentiti.

Siate SICURI e verificatelo con un account non privilegiato. Quando l'ho installato per la prima volta l'ho testato e ha funzionato bene, ma in seguito quando un utente standard non amministratore del server l'ha provato, questo non è riuscito. Risulta che alcune delle directory temporanee devono avere le autorizzazioni modificate per gli utenti guest. Non riesco a ricordare le impostazioni esatte.

SERVER["REMOTE_USER"];

Mi assicuro quindi che $ winuser sia nel mio database di utenti consentiti.

Siate SICURI e verificatelo con un account non privilegiato. Quando l'ho installato per la prima volta l'ho testato e ha funzionato bene, ma in seguito quando un utente standard non amministratore del server l'ha provato, questo non è riuscito. Risulta che alcune delle directory temporanee devono avere le autorizzazioni modificate per gli utenti guest. Non riesco a ricordare le impostazioni esatte.

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