So che ci sono migliaia di segnalazioni di persone che hanno problemi a far funzionare l'autenticazione integrata di Windows con IIS, ma sembrano tutti portare a pagine Web che non si applicano o soluzioni che ho già provato. Ho già implementato dozzine di siti come questo prima, quindi o c'è qualcosa di bizzarro nel server / nella configurazione, oppure sto guardando da troppo tempo e non vedo l'ovvio.
In poche parole, tutto funziona perfettamente sulla mia macchina locale, ma cade a pezzi sul server di produzione, che per quanto posso dire ha la stessa identica configurazione .
Sulla macchina locale:
- La macchina esegue Windows 7 Ultimate, Service Pack 1, IIS 7.5.
- Il sito è stato testato con successo, utilizzando sia IIS che VS Web Development Server.
- La configurazione del sito IIS ha tutti i metodi di autenticazione disabilitati tranne l' autenticazione di Windows.
- Il computer locale non si trova su alcun dominio.
- I provider impostati sono Negoziazione e NTLM (non Negozia: Kerberos).
- La protezione estesa è disattivata.
- Tutti i browser testati (IE, Firefox, Chrome) mostrano il prompt di richiesta e mi consentono di accedere al dominio localhost con il mio account di Windows (locale).
- Tutti i browser testati funzionano anche utilizzando un indirizzo IP locale opaco - quindi ai browser stessi non sembra importare se il sito appare "locale" o "remoto".
- Ho aggiunto una riga di visualizzazione alla pagina Web che mostra l'utente attualmente connesso e mostra esattamente cosa mi aspetterei (qualunque utente locale con cui ho effettuato l'accesso).
Sulla macchina remota:
- Il server esegue Windows Server 2008 R2, IIS 7.5.
- Il caricamento della pagina Web genera un errore 401.2 immediato : non sei autorizzato a visualizzare questa pagina a causa di intestazioni di autenticazione non valide. Non viene mai visualizzata alcuna richiesta di sfida.
- La configurazione del sito IIS ha tutti i metodi di autenticazione disabilitati tranne l' autenticazione di Windows.
- Il computer remoto non si trova su alcun dominio.
- I provider impostati sono Negoziazione e NTLM (non Negozia: Kerberos).
- La protezione estesa è disattivata.
- Sul computer remoto (sessione desktop remoto), lo stesso errore viene visualizzato in Internet Explorer indipendentemente dal fatto che il dominio sia localhost o l'indirizzo IP esterno.
- Se provo a visualizzare il sito Web remoto dal mio computer locale , l'errore è ancora 401, ma un 401 leggermente diverso. Nessun sottocodice, con il testo: accesso negato a causa di credenziali non valide.
- La funzione ruolo IIS di autenticazione di Windows è installata.
- Il WindowsAuthentication modulo viene aggiunto (a livello server).
- Lo stesso errore si verifica se disattivo l'autenticazione di Windows e abilito l'autenticazione di base.
- Il sito si carica se disattivo l'autenticazione di Windows e abilito Anonimo (ovviamente).
- Ho già seguito tutti i passaggi per la risoluzione dei problemi sul supporto Microsoft: Risoluzione dei problemi relativi agli errori HTTP 401 in IIS
- Ho già provato la soluzione alternativa mostrata su un'altra pagina di supporto Microsoft (presumibilmente per forzare NTLM come unico metodo).
Ultimo ma non meno importante, ho provato ad attivare FREB per errori 401.2 e i risultati non sembrano dirmi nulla di utile, tutto ciò che vedo è il seguente avviso:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Notification 2
HttpStatus 401
HttpReason
HttpSubStatus 2 non autorizzato
ErrorCode 2147942405
ConfigExceptionInfo
Notifica AUTHENTICATE_REQUEST
ErrorCode L'accesso è negato. (0x80070005)
... questo sembra semplicemente dirmi quello che già so (che sta semplicemente rifiutando la richiesta invece di negoziare le credenziali).
La traccia indica che il modulo WindowsAuthentication è caricato correttamente perché esiste una NOTIFY_MODULE_START
riga con ModuleName
= WindowsAuthentication
(e vari altri eventi di follow-up ASP.NET - [un] fortunatamente, qui non ci sono errori o avvisi interessanti).
Qualcuno può dirmi cosa potrei perdere qui?
Aggiornamento rapido:
Sto un po 'a disagio a inviare un intero dump di Wireshark in quanto rivelerebbe IP, URL e altre cose, ma ho fatto un confronto fianco a fianco delle risposte HTTP da localhost e dal server remoto in Fiddler, e sembra abbastanza auto -evidente qual è il problema:
localhost:
HTTP / 1.1 401 Non autorizzato Controllo cache: privato Tipo di contenuto: text / html; charset = utf-8 Server: Microsoft-IIS / 7.5 Autenticazione WWW: negoziazione Autenticazione WWW: NTLM X-Powered-By: ASP.NET Data: sab, 17 dic 2011 23:42:34 GMT Lunghezza contenuto: 6399 Supporto proxy: autenticazione basata sulla sessione
A distanza:
HTTP / 1.1 401 Non autorizzato Tipo di contenuto: testo / html Server: Microsoft-IIS / 7.5 X-Powered-By: ASP.NET Data: sab, 17 dic 2011 23:43:13 GMT Lunghezza contenuto: 1293
A parte alcune differenze apparentemente insignificanti come il controllo della cache, la differenza principale è che il server remoto non sta inviando le intestazioni WWW-Authenticate al client.
Quindi, suppongo che restringa la domanda a: Perché IIS non sta inviando le intestazioni WWW-Authenticate quando l'autenticazione di Windows sembra essere installata, caricata ed abilitata esclusivamente?