Vorrei generare una pagina 401 se l'utente non ha il permesso giusto.Come intercettare 401 dall'autenticazione moduli in ASP.NET MVC?
L'utente richiede un URL e viene reindirizzato alla pagina di accesso (Ho negato tutto l'anonymous in web.config). L'utente si collega correttamente e viene reindirizzato all'URL originale. Tuttavia, al momento del controllo dell'autorizzazione, viene determinato che l'utente non dispone dell'autorizzazione richiesta, quindi vorrei generare un 401. Ma l'autenticazione basata su form gestisce sempre 401 e reindirizza l'utente alla pagina di accesso.
Per me, questo non è corretto. L'utente ha già autenticato, l'utente non ha l'autorizzazione corretta.
In altri scenari, ad esempio nello scenario di servizio ajax o REST, non desidero assolutamente la pagina di accesso - ho bisogno della pagina 401 corretta.
Finora, ho provato il filtro Autorizza personalizzato per restituire ViewResult con 401 ma non ha funzionato. Ho quindi provato un normale filtro azione, ignorando OnActionExecuting, che non ha funzionato neanche.
Quello che ho potuto fare è gestire un evento in Global.asax, PostRequestHandlerExecute, e controllare per il permesso quindi scrivere direttamente alla risposta:
if (permissionDenied)
{
Context.Response.StatusCode = 401;
Context.Response.Clear();
Context.Response.Write("Permission Denied");
Context.Response.Flush();
Context.Response.Close();
return;
}
che funziona, ma non è proprio quello che voglio. Prima di tutto, non sono nemmeno sicuro se questo sia l'evento giusto o il posto in cantiere per farlo. In secondo luogo, voglio che la pagina 401 abbia un po 'più di contenuto. Preferibilmente, dovrebbe essere una pagina di aspx con possibilmente la stessa pagina principale del resto del sito. In questo modo, chiunque visiti il sito può vedere che l'autorizzazione è negata ma con lo stesso aspetto, ecc. Ma l'utente di ajax o di servizio otterrà il codice di stato appropriato su cui agire.
Qualche idea su come raggiungere questo obiettivo? Ho visto altri post con richieste simili ma non ho visto una soluzione che possa essere utilizzata.
E no, io non voglio una 403.
Non sono sicuro di quale delle risposte mi stai indirizzando. In ogni caso, non voglio re-route o reindirizzare perché il mio stato di risposta non sarà 401 - sarà qualcosa come 302 seguito da 200, che non è quello che mi aspetterei se stessi accedendo all'URL da un client Ajax. –
Jiho - Mi scuso, non ho letto abbastanza bene la domanda. Ho pensato che stavi solo cercando di eseguire un reindirizzamento 401 personalizzato. – Robaticus