Autenticazione e autorizzazione con ASP.NET Core

di Moreno Gentili, in ASP.NET Core,

Anche quando le tecnologie evolvono, alcuni temi restano sempre attuali come la sicurezza nelle applicazioni web. In passato ci siamo occupati di soluzioni come ASP.NET Identity (http://www.aspitalia.com/articoli/asp.net4.5.1/security-asp.net-mvc-identity.aspx) in merito alle funzionalità di login e membership nelle applicazioni ASP.NET. Quest'oggi rivisiteremo alcuni di questi concetti nel contesto di ASP.NET Core, e questo ci darà l'opportunità di esplorare alcune delle sue novità architetturali.

L'articolo si concentra in particolar modo sui temi di autenticazione e autorizzazione e sulla loro interazione all'interno della pipeline dei middleware di un'applicazione ASP.NET Core.

Figura 1

Autenticazione e autorizzazione: due responsabilità distinte

Iniziamo rispolverando le basi. Quando vogliamo consentire ad un utente di accedere ad un'area protetta di un sito web, ci sono due step operativi da superare.

  • Autenticazione: Riconoscere l'utente in base alle credenziali (in chiaro o crittografate) che ha fornito insieme alla richiesta HTTP inviata al server;
  • Autorizzazione: Determinare se tale utente (ormai riconosciuto) ha il privilegio di consultare la risorsa protetta e, in caso negativo, impedirgli l'accesso.

"Autenticare" significa sostanzialmente controllare se nella richiesta HTTP esistono credenziali valide e creare un oggetto ClaimsPrincipal contenente l'identità dell'utente. L'oggetto ClaimsPrincipal viene quindi allegato alla richiesta corrente e l'accompagna fino al suo completamento.

Per autenticarsi, un utente può fornire le proprie credenziali oppure inviare un titolo di riconoscimento rilasciato dall'applicazione, come un cookie di autenticazione, un token JWT o una API key (tra gli altri).

Come avremo modo di constatare, le modalità di autenticazione sono molteplici e diversificate per assecondare le tante modalità di utilizzo e i vari tipi di utente, come la persona fisica o l'applicazione di terze parti.

"Autorizzare" l'utente, per un'applicazione ASP.NET Core, significa invece esaminare la ClaimsPrincipal allegata alla richiesta corrente e determinare se essa possieda i privilegi necessari all'accesso alla risorsa desiderata.

Figura 2

L'identità è basata su claims

L'oggetto ClaimsPrincipal serve ad incapsulare una o più ClaimsIdentity che è concettualmente simile ad un qualsiasi documento di identità si trovi nel nostro portafogli. Proprio come un documento di identità, essa reca una serie di Claim che descrivono le caratteristiche dell'utente. Ogni Claim è una coppia chiave-valore come illustrato nell'immagine seguente.

Figura 3

Allegare Claim alla ClaimsIdentity è un buon modo per avere a portata di mano delle informazioni sull'utente che possono tornarci utili per prendere delle decisioni in vari punti dell'applicazione, senza che si debba necessariamente recuperare tali informazioni dal database. Ogni Claim descrive cosa l'utente è, anziché cosa può fare. Alcuni esempi sono:

  • Il nome di battesimo, che tipicamente viene visualizzato all'utente nella parte alta del sito;
  • I ruoli che gli sono stati assegnati che serviranno poi a decidere a quali aree avrà accesso;
  • I contatti che l'applicazione userà per inviare comunicazioni;
  • L' id usato all'interno del sistema, che verrà usato per filtrare i risultati di una query.
5 pagine in totale: 1 2 3 4 5
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