Possiedo un sito Web ASP.NET con autenticazione tramite ActiveDirectory.ASP.NET WindowsAuthentication personalizzato 401 Errore pagina non autorizzata
Ora, quando un utente autenticato apre una pagina - viene automaticamente autenticato. Ho riscontrato un problema: quando un utente non autenticato (, ad esempio, un utente Mozilla Firefox con proprietà non definita network.automatic-ntlm-auth.trusted-uris
) apre una pagina, IIS invia 401 risposte e richiede un login \ password.
Quello che voglio è non chiedergli un login \ password - mostra solo una pagina di errore personalizzata. Sembra piuttosto semplice: gli utenti autenticati ottengono la pagina richiesta, i non autentificati vengono reindirizzati a una pagina di errore personalizzata. Funzionerebbe bene per FormsAuthentication.
Tuttavia, ho provato così tanti modi ormai. Qualsiasi reindirizzamento Web.config non funziona. Anche se cancello uno Response
e inserisco un reindirizzamento, riceverò un ciclo perché questa pagina personalizzata (* ad esempio, /Error/AccessDenied
) richiede anche l'autenticazione. Contrassegnare un controller come AllowAnonymous
non fa nulla.
Tuttavia, se si attiva l'autenticazione anonima in Gestione IIS, gli utenti di dominio autenticato reale non sono autorizzati quando aprono un sito Web.
Come posso risolvere questo problema?
Si desidera che gli utenti non-IE per essere reindirizzare a un'altra pagina? La riscrittura degli URL basata su User Agent è la strada da percorrere. –
Non possibile. La prima richiesta dal browser è sempre anonima. IIS risponde sempre con "401 Non autorizzato" con "www.authenticate: negotiate" (o NTLM o entrambi). Il client (browser) quindi richiede di nuovo l'intestazione 'Autorizzazione: Negoziare ..hash..' questa volta. A seconda del sito attendibile, il browser *** chiederà sempre le credenziali. Non puoi mostrare un errore personalizzato, perché la prima risposta è sempre '401', a prescindere. – Abhitalks
È possibile scrivere un modulo HTTP e collegarsi a HttpApplication.PostAuthenticateRequest. Da lì è possibile utilizzare HttpContext.RewritePath e/o giocare praticamente con il contesto di risposta nel modo desiderato. Difficile dire di più senza un chiaro caso di riproduzione. –