Security in ASP.NET MVC 5 con ASP.NET Identity 2

di Moreno Gentili, in ASP.NET MVC, Architettura, Security,

Dopo le funzionalità della versione 1.0 presentate nell'articolo di Giancarlo Lelli, torniamo a parlare di ASP.NET Identity, il sistema di autenticazione e membership per applicazioni ASP.NET 4.5, sviluppate su WebForms o MVC. La particolare flessibilità di questo prodotto, presto open source, lo rendono una scelta ideale in quelle applicazioni che richiedono maggiori opzioni di autenticazione e un miglior controllo sul meccanismo di persistenza dei dati.

Introduzione alla versione 2.1

ASP.NET Identity viene rilasciato con una nuova versione 2.0 e un successivo bugfix 2.1 che lo rendono un prodotto più maturo, attento sia alla sicurezza degli account che ad offrire una maggiore quantità di funzioni rivolte alla gestione degli account. Come altri prodotti gestiti da Microsoft, gode di rilasci frequenti. Infatti, la versione 2.2 è tutt'ora in produzione e promette miglioramenti prestazionali.

Figura 1

Installazione

ASP.NET Identity possiede un design modulare, composto da molte semplici parti che lo rendono facilmente adattabile ad una notevole varietà di scenari. Siamo di fronte ad un prodotto progettato per essere future-ready ed in grado di concorrere con l'elevata longevità di Membership API, suo predecessore.

I componenti di ASP.NET Identity sono raccolti in tre pacchetti ottenibili da NuGet, ciascuno avente specifiche responsabilità.

Figura 2

Nel pacchetto Core spicca la classe UserManager, nostra principale API di gestione ad alto livello degli utenti. Sebbene possa essere usato individualmente, troveremo certamente utile anche del pacchetto OWIN che si occupa dell'interazione con il mondo HTTP, ovvero di verificare le credenziali e di emettere i cookies di autenticazione. Il pacchetto EntityFramework ci permetterà di persistere gli account con una della tecnologie database supportate.

Questo tipo di design è senz'altro gradito perché ci consente di scegliere altri meccanismi di persistenza basati su database documentali come MongoDB o su sistemi di archiviazione nel cloud, come Windows Azure Table Storage.

Andiamo dunque ad installare ASP.NET Identity dalla console di gestione pacchetti di Visual Studio.

Install-Package Microsoft.AspNet.Identity.Core
Install-Package Microsoft.AspNet.Identity.Owin
Install-Package Microsoft.AspNet.Identity.EntityFramework

Tali pacchetti sono già installati nei template di progetto di Visual Studio 2013, a partire dalla Update 2. Un ulteriore suggerimento da parte di Microsoft a far entrare questa tecnologia nei nostri nuovi progetti.

Maggiore sicurezza per gli account

Sin dalla prima versione di ASP.NET, FormsAuthentication e Membership API hanno rappresentato una soluzione molto immediata (ma anche rigidamente standardizzata) di autenticare e gestire gli utenti. Oggi, trascorsi molti anni, come sviluppatori siamo chiamati ad affrontare scenari più complessi e mutevoli. Gli utenti, abituati ad usare molte più applicazioni rispetto al passato, desiderano autenticarsi con il loro account social o trovarsi già autenticati grazie ad un meccanismo di single sign-on. Spesso, le applicazioni web si trovano ad operare in contesti sensibili, in cui la sicurezza è un requisito principe e l'account va protetto anche in caso di furto di password.

Vediamo quali sono le opportunità offerte da ASP.NET Identity 2 in ambito di sicurezza.

Two-factor authentication

La two-factor authentication è volta a rendere più robusta la procedura di login e a limitare l'accesso non autorizzato all'account in caso di furto di password. L'utente non deve solo dar prova di conoscere le sue credenziali di accesso, ma anche di possedere un telefono cellulare o una casella email a cui la nostra applicazione recapiterà un codice di verifica. Possiamo configurare i servizi di recapito SmsService ed EmailService dal file App_Start/IdentityConfig.cs, dove si trova il factory method Create del nostro UserManager.

manager.RegisterTwoFactorProvider(
  "Codice telefono", new PhoneNumberTokenProvider<ApplicationUser>
  {
    MessageFormat = "Il codice di sicurezza è {0}"
  });

manager.RegisterTwoFactorProvider("Codice e-mail", 
  new EmailTokenProvider<ApplicationUser>
  {
    Subject = "Codice di sicurezza",
    BodyFormat = "Il codice di sicurezza è {0}"
  });

Dopo aver inserito username e password, l'utente potrà scegliere se ricevere il codice sul telefono o via email. La procedura di login sarà completa solo dopo l'inserimento del codice di verifica.

Figura 3

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