2012-01-30 9 views
5

Stiamo convertendo alcune delle nostre applicazioni Web utilizzate per l'esecuzione dell'autenticazione tramite form, che ora vengono eseguite come autenticazione di Windows. Voglio ricreare la sicurezza della pagina che forma l'autenticazione con modifiche minime alle pagine effettive. Sono stato in grado di ricreare l'effetto desiderato, con un'applicazione web semplificata. Sto eseguendo l'app sulla pipeline integrata di Server 2008 R2 IIS 7.5.Reindirizzamento dell'autenticazione di Windows a una pagina 401 personalizzata

Ho creato una semplice applicazione di 3 pagine utilizzando l'autenticazione di Windows. Le tre pagine sono:

  • Openpage.aspx, che è aperto a qualsiasi utente autenticato
  • Blockedpage.aspx che è bloccato a tutti gli utenti (simbolico di una directory o una pagina che sarebbero bloccati a un sottoinsieme di utenti in base al ruolo dell'utente)
  • ErrorPage.aspx, se l'accesso a pagepage.aspx è bloccato (e rifiutato), l'applicazione deve inoltrare a ErrorPage.aspx dove l'utente ottiene informazioni generiche sull'applicazione.

web.config per l'applicazione:

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     <authentication mode="Windows"/> 
     <authorization> 
     <deny users="?" /> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    <location path="blockedpage.aspx"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
    <system.webServer> 
    <httpErrors errorMode="Custom" > 
     <remove statusCode="401" subStatusCode="-1" /> 
     <error statusCode="401" path="/development/simplesecurityapp/errorpage.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 

    <validation validateIntegratedModeConfiguration="false" /> 
    <defaultDocument> 
     <files> 
     <clear /> 
     <add value="openpage.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

</configuration> 

(Se non tento di reindirizzare i 401 errori a livello asp.net, ottengo solo lo standard “non autorizzato messaggio” che non è l'effetto che voglio dare ai miei utenti.)

Tuttavia, sto ricevendo un errore che non capisco: ogni volta che il server si ripristina, l'app smette di funzionare. IIS restituisce semplicemente 401 errori finché il browser non visualizza un controllo di accesso manuale, che non può essere soddisfatto. (Non desidero mai che i miei utenti vengano presentati con il prompt di accesso al browser)

Tuttavia, se sostituisco la sezione httperrors dopo aver configurato l'applicazione (modificando la configurazione Web o aggiornandola con la GUI del server)) rimuovendo la sezione, accedendo alla pagina e aggiungendo la sezione indietro, l'applicazione inizia a funzionare come previsto e continua fino a quando il server non viene riavviato, momento in cui inizia a fornire nuovamente all'utente il login manuale pop-up, che non può risolvere.

1) È questo il modo corretto per garantire un app con l'autenticazione di Windows (c'è un modo migliore per configurare una directory inaccessibile, come nelle forme, ma ancora fornire una pagina di errore personalizzata?)

2) È questo un effetto del gasdotto integrato e perché funziona in questo modo?

risposta

1

Si sta tentando di fornire contenuto tramite un messaggio di errore di trasporto.

Forms consente di eseguire questa operazione perché è composta da materiale di livello 7, come 302 e 200. 401s sono interpretati dal browser client come "il server non ha gradito le mie credenziali, quindi solleva una finestra di dialogo per chiederne di nuove".

Una pagina autenticata produce almeno 1 401 per poter essere autenticata; che stai sovraccaricando l '"errore" per qualcos'altro è probabilmente la radice del problema.

Non sono sicuro che ci sia un modo elegante per fare quello che vuoi.

Problemi correlati