Gestire la security con ASP.NET Identity

di Giancarlo Lelli, in ASP.NET 4.5.1,

E' disponibile un nuovo articolo con approfondimenti su ASP.NET Identity 2.1

ASP.NET Identity è il nuovo sistema di membership pensato per lo sviluppo di applicazioni ASP.NET. Questo framework rende più facile integrare i dati dell'utente all'interno del nostro sito web ed è basato sul framework OWIN (Open Web Server Interface for .NET), un middleware che definisce un layer standard tra applicazione e web server, astraendo appunto l'applicazione dal server che la esegue.

Per default, il database di membership è gestito attraverso Entity Framework Code First, e tutte le tabelle sono rappresentate da classi che possono essere modificate facilmente a seconda delle esigenze, i cambiamenti possono essere poi distribuiti tramite Code First Migrations. ASP.NET Identity è stato progettato considerando il web per quello che è oggi, ossia un'esperienza social che mira a garantire all'utente esperienze ricche e collaborative e, in buona sostanza, permette a noi sviluppatori di rendere più testabili le nostre applicazioni, integrare agevolmente le funzionalità di login dei social network e interfacciarci con semplicità con l'active directory di Windows Azure.

I claim e la claim-based security

ASP.NET Identity introduce nelle nostre applicazioni web il concetto di claim-based security, dove una serie di claim definiscono l'identità e i privilegi dell'utente fornendo maggiore flessibilità al sistema di autenticazione rispetto ai vecchi membership roles. Per claim si intende una particolare informazione relativa all'utente in questione (Esempio: nome, email, telefono, zipcode), rilasciata da un'autorità "trusted" e identificata come un dizionario chiave valore, dove la chiave è rappresentata dal namespace del claim e il valore da un particolare dato relativo all'utente. Questo approccio stringe di molto le maglie della sicurezza, che prima erano allentate dalla difficoltà di personalizzazione dei roles. Essendo ASP.NET Identity pensato per coesistere con sistemi di autenticazione esterni (Microsoft Account, Facebook, Twitter), il token che ci verrà restituito ci permetterà di ottenere un numero maggiore di informazioni relative all'utente che potremmo poi includere nella nostra applicazione.

Le nuove classi UserManager e AuthenticationManager

Come abbiamo avuto modo di vedere nell'articolo di introduzione ad ASP.NET 4.5.1, una caratteristica dei nuovi template di Visual Studio 2013 è che, alla creazione di una nuova web application, abbiamo la possibilità di selezionare la tipologia di autenticazione che desideriamo, grazie alla dialog dell'immagine in basso.

Figura 1

L'opzione Individual User Accounts, in particolare, rappresenta la casistica di utilizzo più generale ed è analoga alla FormsAuthentication: in questo caso, infatti, l'autenticazione è gestita a livello di singola applicazione, tipicamente tramite uno storage locale, identificando le richieste tramite il rilascio di un cookie e con la possibilità di integrarsi con provider di terze parti, come Facebook, Twitter, Google e via discorrendo.

Se abbiamo creato un'applicazione ASP.NET MVC 5, il template di default contiene un controller dedicato alla gestione di tutti gli aspetti relativi alla security, denominato AccountController, che è il punto di partenza ideale per iniziare a prendere confidenza con il nuovo framework.

Se diamo un'occhiata alla sua implementazione, possiamo notare come venga fatto massiccio uso dell'oggetto UserManager. Si tratta di uno delle nuove classi introdotte da ASP.NET Identity e per il supporto a tutti gli aspetti legati alla alla gestione degli utenti e alla memorizzazione dei claim: validazione delle credenziali, creazione di un utente, modifica password, sono alcuni dei tipici task che possiamo portare avanti tramite questo oggetto. A riprova del fatto che abbiamo a che fare con un framework moderno e ripensato completamente, è da segnalare anche che tutti i metodi supportano pienamente il pattern async/await per migliorare la scalabilità dell'intero sistema.

Cerchiamo di capire nel concreto come funziona, prendendo come esempio il caso della login di un utente, che richiede sia la validazione delle credenziali, sia la gestione dei cookie. Per il primo di questi due task, possiamo sfruttare il metodo FindAsync della classe UserManager, che si occupa di restituire un oggetto ApplicationUser qualora venga trovato un utente associato a tali credenziali:

var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
    await SignInAsync(user, model.RememberMe);
    return RedirectToLocal(returnUrl);
}
4 pagine in totale: 1 2 3 4
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

Top Ten Articoli

Articoli via e-mail

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

In primo piano

I più letti di oggi

In evidenza

Misc