Introduzione
ASP.NET permette una facile gestione di aree protette nei nostri siti grazie ai vari tipi di autenticazione che mette a disposizione in modo del tutto automatico:
- Autenticazione Windows
- Autenticazione Forms
- Autenticazione Passport
A parte l'ultima che è stata pressocché ignorata dagli sviluppatori, le prime due sono veramente utilissime e facili da configurare. Con l'autenticazione integrata di Windows possiamo, grazie a poche righe nel file web.config, permettere l'accesso a utenti (o gruppi di utenti) creati da "Gestione computer", a determinate directory o pagine ASP.NET. Ovviamente questo tipo di autorizzazione può essere utilizzato pienamente solo se si ha tra le mani il server (creazione e gestione di utenti o gruppi di utenti).
L'autenticazione basata sui Forms, invece, è utilizzabile senza molti sforzi su qualsiasi piano di hosting: per ogni cartella che vogliamo proteggere è sufficiente inserire un file web.config con la sezione
Limiti dell'autenticazione basata sui Forms
E sì, anche se il framework ci facilita di molto il lavoro per la protezione di determinate directory o pagine nel nostro sito, con l'autenticazione basata sui Forms andiamo incontro a dei limiti che in determinati casi possono essere fastidiosi.
Prediamo dei casi reali: in un sito vogliamo che solo gli utenti che si sono registrati, possano accedere a una determinata sezione. Per fare questo è sufficiente creare un nostro web.config nella root con questo codice:
<configuration> <system.web> <authentication mode="Forms"> <forms name="myform" loginUrl="login.aspx" protection="All" timeout="20" /> </authentication> <authorization> <allow users="*" /> </authorization> </system.web> </configuration>
E nella directory che vogliamo proteggere:
<configuration> <system.web> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
Quando l'utente cercherà di visualizzare qualche pagina ASP.NET da questa cartella, verrà rimandato alla pagina "login.aspx" dove potrà inserire i suoi dati; sarà quindi il nostro codice, dopo aver controllato i dati inseriti, ad autenticare o meno il visitatore.
Tutto semplice, dunque.
Ma facciamo un'ulteriore ipotesi. In un nostro sito abbiamo più sezioni da proteggere, e vogliamo che alcuni possano accedere solo ad una sezione (e solo a questa), alcuni ad un'altra, altri a tutte le sezioni, ad esempio l'amministratore.
Con l'autenticazione integrata in Windows possiamo realizzare il tutto facilmente, è sufficiente inserire gli utenti in gruppi con le apposite autorizzazione e tutto si risolve senza altri sforzi.
E con l'autenticazione basata sui Forms? Come possiamo sapere che un utente è autorizzato o meno a una sezione del sito? La soluzione più semplice e la prima che viene in mente, soprattutto se si proviene dal mondo di Classic ASP, è l'utilizzo di una variabile Session dove memorizzare le autorizzazioni o il gruppo di quell'utente, quindi, all'inizio della nostra pagina ASP.NET è sufficiente inserire un banale controllo:
void Page_Load(Object o, EventArgs e) { if (Session["gruppo"]!="Utente normale") Response.Redirect ("Errore.aspx"); // // ... // }
Ovviamente, questo controllo dovremo inserirlo per ogni pagina ASP.NET della sezione e questo per tutte le pagine di tutte le sezioni!
Cerchiamo dunque di trovare una soluzione migliore al problema.
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Restituire il correlation ID in caso di errore in ASP.NET Core Web API
Creare API GraphQL con ASP.NET Core e HotChocolate
Effettuare il tracing asincrono delle chiamate a un'applicazione ASP.NET Core
Eseguire integration test di un progetto ASP.NET Core
.NET Conference Italia 2020
Eseguire del codice personalizzato al click di una checkbox in Blazor
Migliorare la nostra produttività con ASP.NET Core e live reload
Eseguire lo shutdown pulito di un'applicazione ASP.NET Core
L'agenda di #netconfit è online => https://aspit.co/netconfit-20 3 track, tante sessioni e una keynote speciale di @shanselman per la più importante conferenza in lingua italiana su .NET! Vi aspettiamo il 24/11. Iscrizioni sempre aperte! #donet #aspnet #netconf
Rigenerare il database negli integration test di ASP.NET Core
Correlare i log in un'applicazione distribuita con ASP.NET Core