PARTE 5 – CAPITOLO 14 – FORMS AUTHENTICATION & MEMBERSHIP
La Forms Authentication permette un elevato grado di personalizzazione del processo di login. Questo può essere allo stesso tempo un fatto positivo (per via del maggiore controllo sulle operazioni) ma anche una fonte di problemi (bisogna implementare e testare personalmente le procedure implementate).
Bisognerebbe utilizzare la Forms Authentication solo se ci sono motivi validi per non utilizzare la Windows Authentication.
ASP.NET controlla, ogni volta che l’utente richiede una risorsa protetta, che abbia un token valido per accedervi. In caso negativo viene riportato alla pagina di loign.
Le caratteristiche positive della Forms Authentication sono il pieno controllo sul codice di autenticazione e sul rendering della pagina di login/errore, la compatibilità con tutti i browser e la possibilità di decidere come immagazzinare i dati degli utenti.
Di default i dati sugli utenti vengono immagazzinati nel file “web.config”, ma possono essere spostati anche in altri luoghi (ad esempio un database). In ogni caso è sempre utile criptare le password con un algoritmo tipo SHA1.
La Forms Authentication non richiede esplicitamente che l’applicazione web sia programmata in ASP.NET: è estensibile a qualsiasi linguaggio server a patto di configurare a dovere i relativi handler e il file di configurazione.
ASP.NET fornisce una utile struttura dati (in questo caso un database SQL Server) in cui memorizzare in modo semi-automatico le informazioni relative agli utenti.
La Membership è una API costruita sul concetto di Form Authentication che automatizza i processi di login (possibilità di creare/eliminare utenti, gestire il reset/generazione/recupero password, memorizzazione di dati personali ecc..).
Le Membership andrebbero dichiarate nel file web.config principale, in modo da influenzare tutta l’applicazione.
Il concetto che sta alla base della Membership è che il suo lavoro è completamente indipendente dal Data Store sottostante. Il fatto di scegliere le funzioni preconfigurate da ASP.NET ha come unica ragione la semplicità e l’immediatezza di utilizzo. In realtà questa struttura dati può essere completamente personalizzata se non addirittura riscritta (ad esempio per usare Oracle invece che SQL Server). Nel caso in cui si scegliesse di utilizzare e modificare la soluzione proposta dal Framework occorre sapere che tutti i metodi e le proprietà utili sono dichiarate in System.Web.Security.
Per usare una Membership i passi da seguire sono 5: impostare nel web.config la forms authentication e l’accesso negato per i visitatori anonimi, costruire la Membership Data Store (si può usare anche il tool di Microsoft), configurare il database e la stringa di connessione e il membership provider nel file web.config, creare/gestire utenti nella membership (anche tramite WAT), creare una pagina di login default/custom e gestire gli eventi derivati dal login stesso.
Nota: se si restringe l’accesso anonimo alla root del sito, anche i file esterni (come il foglio di stile CSS) non saranno scaricati. Bisogna aggiungere una all’interno del file web.config per consentire l’accesso alla particolare risorsa.
Usando (e modificando) le Stored Procedures messe a disposizione dal Framework è possibile creare velocemente le maschere di login, registrazione, recupero password, update ecc..
Per creare Membership personalizzate occorre ereditare da System.Web.Security.Membership-Provider.
A partire da Visual Studio 2005 ci sono due tipi di database: quelli classici, memorizzati su SqlServer e quelli file-based, che sono file in formato mdf memorizzati nella cartella App_data e che contengono al loro interno la struttura del db. Questi sono utili per piccole applicazioni (spesso per database Client Side su applicazioni standalone) mentre non sono adatti a web application su larga scala per via dei problemi di performance e per la scarsa gestione della concorrenza.
Il tool aspnet_regsql.exe permette di configurare la struttura per gestire le membership. Se viene lanciato (da console Visual Studio) senza parametri mostrerà un wizard.
Dopo la creazione delle tabelle per la gestione della membership bisogna inserire, nel web.config di root, la connection string nella sezione configuration > connection strings e la membership nella sezione nella system.web (ricordarsi poi di settare il default provider).
A partire da IIS 7 è possibile gestire molte delle caratteristiche delle membership direttamente dalla console di amministrazione del Web Server.