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.