Membership e Roles API: autenticazione, autorizzazione e gestione dei ruoli con ASP.NET 2.0

di Andrea Zani, in ASP.NET 2.0,

Nella nuova versione di ASP.NET, la 2.0, per la gestione degli utenti e l'autenticazione è stato creato un nuovo sottosistema di gestione, chiamato Membership API, come aiuto allo sviluppatore, che spesso nelle applicazioni si limita a ripetere, con poche varianti, lo stesso codice. Questo sistema ci permette, senza creare il database o scrivere codice per accederci, la gestione completa, dalla creazione alla modifica, di utenti per il sistema di autenticazione nel nostro sito.

In aggiunta sono stati introdotti i nuovi controlli web conosciuti col nome di Security Server Control.

Sommando queste novità, diventa per tutti possibile realizzare applicazioni web protette quasi senza scrivere codice!

Tutto questo è possibile grazie al Provider Model Design Pattern, che è già stato ampiamente illustrato in questo articolo.

Quale database?

Una delle novità di ASP.NET 2.0 è la gestione "a provider" di molte delle nuove API introdotte. I provider ci permettono la configurazione e la personalizzazione estrema per le nostre web application con poco sforzo per noi sviluppatori. Di base, con ASP.NET 2.0 vengono forniti due provider per l'autenticazione:

  • SqlMembershipProvider
  • ActiveDirectoryMembershipProvider

Il primo viene utilizzato per l'utilizzo di SQL Server, il secondo per la gestione degli utenti in Active Directory. Microsoft distribuisce già come download separato anche un provider per database di tipo Access. Nulla ci vieta di crearne di nostri personalizzati, come per l'utilizzo di altri tipi di database o fonti dati: MySQL, Oracle, file XML. In un prossimo articolo vedremo come realizzarne uno, ma c'è da scommettere che da qui a poche settimane ci saranno sistemi anche per questi database, prodotti da terze parti.

Di default viene cercata un'istanza del nuovo SQL Server 2005 Express Edition, che è in grado di gestire i database di tipo file come Access, facendone l'attach al volo, ma con il vantaggio di fornire le stesse funzionalità di un SQL Server normale.

Attraverso un wizard, nella directory dell'applicazione viene creata una nuova directory di nome App_Data e al suo interno il database di nome ASPNETDB.MDF. Naturalmente devono essere presenti i permessi necessari per l'utente con il quale gira l'applicazione web perché sia possibile la loro creazione.

Proteggiamo alcune sezioni del nostro sito

I programmatori Microsoft hanno cercato di ridurre il lavoro di noi sviluppatori introducendo anche dei web control pensati per la classe Membership, in grado di offrire meccanismi per l'autenticazione e la gestione degli utenti.

Immagine

È dunque sufficiente inserire questi web control nelle nostre pagine perché essi facciano tutto il lavoro per noi, senza scrivere alcun codice. Se, per esempio, inserissimo il web control "Login", nella nostra pagina otterremmo qualcosa di simile a quanto riportato nella figura seguente.

Immagine

Possiamo modificare il layout dei controlli con quelli già predefiniti o crearne di nuovi. Nel primo esempio che è possibile scaricare con questo articolo è presente una web application che utilizza questi web control.

Se non volessimo usare questi control possiamo utilizzare la classe Membership, che è poi ciò che fa il control Login per noi, in maniera automatica.

Per creare un utente basta dunque utilizzare questo codice:

MembershipCreateStatus ms;
MembershipUser user=Membership.CreateUser(
    "andrea74",
    "andrea_74",
    "andrew@aspitalia.com",
    "Anni?",
    "31",
    true,out ms);
if (user==null)
  Label1.Text =  "Non è possibile creare un utente";
else
  Label1.Text  =  "Utente creato";

Mentre per verificare l'esistenza di un utente dovremo utilizzare:

// C#
if (Membership.ValidateUser(username.Text, password.Text))
  FormsAuthentication.RedirectFromLoginPage(username.Text, false);
else
  Label1.Text = "Username e password non corretti!";

' VB.NET
if Membership.ValidateUser(username.Text, password.Text)) then
  FormsAuthentication.RedirectFromLoginPage(username.Text, false)
else
  Label1.Text = "Username e password non corretti!"
End if
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