Autenticazione di ASP.NET: Forms Authentication con roles

3 pagine in totale: [1] 2 3 Avanti >>

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:

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 con all'interno le "allow" per gli utenti a cui vogliamo permettere l'accesso e le "deny" per gli utenti a cui vogliamo negare l'accesso.

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.

3 pagine in totale: [1] 2 3 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC