2009-03-29 21 views
23

Ho una situazione con una grande applicazione interna basata sul Web aziendale che esegue ASP.NET 3.5 su IIS6 generando 401 risposte "non autorizzate" seguite da 200 risposte "Ok" (come profilato da Fiddler). Sono consapevole del perché questo accada (autenticazione integrata che costringe il browser a inviare nuovamente le credenziali), ma sto cercando alcune considerazioni su come minimizzare o sradicare la situazione. L'applicazione in questione è in esecuzione nella WAN con alcuni utenti che presentano una latenza fino a 250 ms, quindi forzare una richiesta successiva può avere un impatto notevole sul tempo di caricamento della pagina, in particolare quando vi sono numerosi elenchi a discesa a cascata nella creazione delle pagine.Eradicare 401 risposte "non autorizzate" seguite da 200 risposte "Ok"

Gli utenti dell'applicazione sono interni a un ambiente desktop gestito, quindi i meccanismi per forzare il browser a inviare credenziali alla prima richiesta (è anche possibile?) Potrebbero essere possibili da una prospettiva di distribuzione. Ciò funzionerebbe per le pagine che richiedono l'identità dell'utente ma per le risorse che non richiedono l'autenticazione (WebResource.axd, ScriptResource.axd e alcuni servizi Web personalizzati), consentendo l'autenticazione anonima sarebbe possibile. Ho cercato di definire questo sulla base per posizione nel web.config ma i risultati sono stati misti (ancora un numero di 401 risposte).

Apprezzerei qualsiasi guida su una "best practice" per affrontare questa situazione. Ci sono un sacco di risorse là fuori che identificano il problema, ma nessuno di quelli che ho trovato forniscono una soluzione fattibile.

Grazie!

Modifica: le risorse che non richiedono l'autenticazione (ovvero i servizi Web utilizzati per elenchi a discesa a cascata) possono essere richieste in modo anonimo aggiungendo una voce di posizione alla configurazione Web, ma devo ancora trovare una risposta per le risorse autenticate.

+0

Che browser stanno utilizzando? La maggior parte dei browser invia sempre credenziali di autenticazione http di base. La risposta dipende probabilmente dal browser. – recursive

+0

Il browser è IE6 con alcuni utenti che vengono migrati su IE7. –

risposta

15

purtroppo questo è un artefatto della HTTP NTLM authentication scheme.

In breve, il browser (Internet Explorer o altro) non sa che è necessario autenticarsi finché non viene rimbalzato con una risposta 401 contenente un'intestazione di risposta WWW-Authenticate.

Nel caso di WWW-Authenticate: NTLM - abbastanza fastidiosamente - richiede due 401 risposte su una singola connessione permanente per completare, e questo processo deve essere ripetuta una volta la connessione permanente HTTP è chiusa. Quindi, anche se si è in grado di ottenere il browser per avviare una richiesta che tenta ciecamente NTLM, almeno una risposta 401 non può essere rimossa dalla transazione.

Penso che la soluzione migliore sarebbe massimizzare la quantità di tempo in cui le connessioni permanenti vengono lasciate aperte in modalità inattiva.

+0

Scopri le impostazioni di IIS. http://msdn.microsoft.com/en-us/library/aa347472.aspx Puoi giocare con queste impostazioni per ridurre le richieste 401. Fai attenzione però alle tue scelte .. AuthPersistNonNTLM, authPersistSingleRequest – batspy

0

Credo che si possa convincere Firefox ad inviare automaticamente le credenziali NTLM a un gruppo di domini autorizzati tramite le impostazioni "about: config" - utilizzare l'impostazione "network.automatic-ntlm-auth.trusted-uris". Non ho provato questo me stesso però. Non sono sicuro che ci sia un equivalente per Internet Explorer.

Purtroppo se si sta utilizzando qualcos'altro come Kerberos non sembra essere un modo per evitare il 401.

+0

Grazie BRH, sfortunatamente la dipendenza è su IE6 e 7. –

+2

L'impostazione 'network.automatic-ntlm-auth.trusted-uris' come descritto consente a Firefox di autenticarsi senza chiedere all'utente le credenziali del dominio, ma non lo fa risolvere il "problema" del modello 401-401-200. Fa parte dell'autenticazione NTLM e si verificherà sempre, indipendentemente dalle impostazioni del browser. – hmqcnoesy

0

Potrebbe essere necessario prendere in considerazione l'autenticazione basata su form se la latenza 401-indotta è troppo lunga. Gli utenti dovrebbero accedere esplicitamente, ma solo una volta. Quindi è possibile utilizzare un cookie o uno schema senza cookie e ottenere una risposta al primo tentativo.

Immagino che il caricamento della pagina sarebbe lento se si dispone di elenchi a cascata e il caricamento iniziale della pagina compila un valore che fa sì che un POST riceva l'elenco successivo, imposta tale valore, un altro POST per ottenere di nuovo l'elenco successivo, e così via.Se questa è la situazione, forse è necessario popolare tutti questi drop-down nel primo round-trip piuttosto che attendere le risposte POST.

3

CSCRIPT.EXE c: \ inetpub \ adminscripts \ adsutil.vbs set W3SVC/AuthPersistSingleRequest FALSE

ridurrà la quantità di 401 in modo significativo.

Problemi correlati