5

In IIS devo:IE/IIS problema di autenticazione integrata

http://myserver/myapplication
http://myserver/reports

L'applicazione rapporti sta segnalando servizi, infatti, che utilizza l'autenticazione di Windows. myapplication è un'applicazione asp.net che utilizza l'autenticazione basata su form.

Il server è al di fuori del dominio della società. Se accedo prima ai rapporti e scrivo l'utente e la password (credenziali locali create sul server) quando richiesto posso accedere alla pagina dei rapporti, senza problemi. Se poi vado direttamente alla pagina di accesso della mia applicazione e provo ad accedere, la pagina di login si aggiorna senza fare nulla. Questo succede sempre in IE 6. In IE 7 succede a intermittenza. Non succede in Firefox o se Fiddler è in esecuzione in background che sembra risolvere il problema al volo.

Ho usato wireshark per vedere cosa sta succedendo e ho trovato che IE 6 invia il token di autenticazione di Windows ottenuto dall'app report a myapp. Questa era l'unica differenza tra IE e Firefox. IIS sembra spaventare e semplicemente interpretare il mio POST alla pagina di accesso come GET e restituire.

Se aggiungo l'autenticazione di Windows a myapplication in IIS, tutto sembra funzionare correttamente con qualsiasi browser.

Perché sta succedendo? Un bug in IE o mi manca qualcosa?

risposta

13

È un errore in IE e un errore nella progettazione dell'autenticazione NTLM/Negotiate (aka Integrated) su HTTP.

NTLM/Negotiate sono protocolli di autenticazione orientati alla connessione, per i quali HTTP non è stato progettato. Di conseguenza, quando si richiede questo meccanismo di autenticazione per una pagina sul proprio server, IE in genere assume che le altre pagine sul server abbiano lo stesso requisito.

Inoltre, per motivi di prestazioni e sicurezza, se IE aspetta una negoziazione/sfida NTLM per una determinata richiesta POST, allora sarà prima di inviare un POST 0 byte, aspettandosi il server per restituire un/401 sfida HTTP a cui autenticherà e quindi invierà correttamente il corpo POST.

Tuttavia, nel tuo caso, la cartella che non richiede autenticazione integrata ottiene il POST 0 byte e dice "Hrm, strano, un post 0 byte. Va bene, HTTP/200, ecco la pagina come se avessi usato GET. "

Perché IE non ottiene mai la sfida 401 che si aspetta, non invia mai effettivamente il corpo POST.

(Fiddler potrebbe confondervi un po 'a causa del modo in cui il riutilizzo della connessione HTTP funziona).

La soluzione è assicurarsi che se si sta utilizzando l'autenticazione integrata sull'host, utilizzarlo ovunque.

+0

grazie Eric, quale sarebbe la soluzione per questo? IE dovrebbe inviare l'intero messaggio POST come fa Firefox, giusto? Immagino che IE 8 funzioni, non l'ho ancora testato. –