Autenticazione di ASP.NET: Forms Authentication con roles

di Andrea Zani, in ASP.NET,

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

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti