Introduzione a Windows Identity Foundation: la Claims Identity

Scritto da  Luca Cestola il mercoledì 19 maggio 2010
Linguaggio:    •  Framework: 3.5,4.0   •  Livello: 200


Windows Identity Foundation è una nuova componente del framework .NET che permette di spostare all'esterno delle applicazioni la logica legata all'identità degli accessi.  Questo permette di creare applicazioni più sicure, tramite l'uso di un modello semplificato basato su claims (attestazioni). La nuova componente si integra con Windows Communication Foundation offrendo quindi un nuovo strumento per la gestione della sicurezza nelle comunicazioni, di cui possono beneficiare ampiamente applicazioni e servizi. In questo primo articolo scopriamo quali sono i concetti alla base di questo nuovo strumento.

Autenticazione e autorizzazione

Quando si accede ad un'applicazione è prassi piuttosto comune che il riconoscimento dell'utente avvenga attraverso un identificativo ed una password. In altri casi potrebbero essere richiesti codici generati da token hardware o dati biometrici. Ad ogni modo chiunque tra sviluppatori, analisti ed esperti di architetture si è prima o poi dovuto confrontare con la gestione degli accessi e con le conseguenze che questa ha nello sviluppo di un software, soprattutto quando ci si muove sul terreno sducciolevole delle applicazioni distribuite. In termini di sicurezza, due concetti fondamentali sono l'autenticazione e l'autorizzazione. La prima riguarda il riconoscimento di chi (persona o software) deve accedere ad un sistema informatico, mentre la seconda riguarda le risorse o le funzionalità a cui è possibile accedere.

Da un punto di vista tecnologico, le soluzioni per gestire le fasi di autenticazione ed autorizzazione sono numerose e indirizzano requisiti diversi. Si va dalla gestione locale degli accessi a complete soluzioni Identity Access Management. Il framework .NET integra i concetti di autenticazione e autorizzazione a diversi livelli e ne offre una visione agnostica rispetto alle specifiche implementazioni. È per questo che in ASP.NET, ad esempio, è possibile rendere disponibile una risorsa ai soli utenti autenticati prescindendo dal meccanismo di autenticazione scelto che può essere indifferentemente la sicurezza integrata di Windows o l'inserimento di credenziali su una pagina web. Anche per l'autorizzazione il concetto è slegato dalla specifica implementazione ed è possibile proteggere porzioni di codice, servizi o pagine web dichiarando le utenze o ruoli che possono accedervi. La protezione delle risorse ed il meccanismo di sicurezza utilizzato sono quindi nettamente separati ed è possibile scegliere la soluzione da applicare a seconda delle necessità, senza che questo comporti cambiamenti rilevanti.

Tra le diverse soluzioni disponibili ce n'è una che riceve sempre più attenzioni da parte di un numero crescente di settori. Si tratta dell'autenticazione ed autorizzazione basata su claim, termine che possiamo tradurre come "attestazione". Il concetto non è nuovo, anzi a dire il vero sono già diversi anni che se ne discute, ma se ne sente sempre più la necessità, poiché offre un approccio che permette di spostare il problema dell'autenticazione e dell'autorizzazione al di fuori del dominio applicativo offrendo una soluzione relativamente semplice anche in scenari molto complessi.

Cominciamo con l'esame di uno degli elementi fondamentali del modello: la claim.

Claim

 Una claim è una struttura dati che contiene poco più che una semplice informazione. Tale informazione può riferirsi ad esempio ad un nome, un indirizzo email oppure può esprimere una caratteristica come l'età o la cittadinanza. Può anche rappresentare, ad esempio, il diritto a poter compiere un determinato tipo di operazione o l'appartenenza ad uno o più ruoli (visualizzatori, utenti, amministratori, ecc...). In teoria non ci sono vincoli al tipo di informazione che può essere rappresentato dalle claim, anche se risulta fondamentale che le informazioni in esse contenute possano essere comprese ed univocamente interpretate da chi le riceve. Per questo motivo una claim deve essere rappresentata con un formato condiviso che ne permetta la comprensione. Il formato a cui si fa riferimento è il Security Assertion Markup Language (SAML) che attualmente è alla sua versione 2.0 ed è uno standard OASIS, un consorzio che promuove l'adozione di standard aperti, di cui fanno parte società di grosso calibro tra cui Microsoft, IBM e Oracle.

La struttura di una claim è relativamente semplice. Gli elementi che la compongono sono i seguenti:

  • type;
  • right;
  • value.

Il type identifica il tipo di informazione che si vuole rappresentare, mentre il value ne esprime il relativo valore. Un type è normalmente rappresentato da un Uri che identifica il tipo di informazione in modo univoco. Il type che esprime, ad esempio, un indirizzo email è rappresentato dal seguente uri:

  • http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

Il right specifica invece se la claim rappresenta un'identità o una caretteristica che si possiede ed è descritto tramite le seguenti uri:

  • http://schemas.xmlsoap.org/ws/2005/05/identity/right/Identity;
  • http://schemas.xmlsoap.org/ws/2005/05/identity/right/PossessProperty.

Una claim, come dicevamo, può contenere qualsiasi tipo di informazione, pertanto potremmo decidere in autonomia l'uri che ne identifica il type. In questo caso le diverse tipologie di claim devono essere condivise tra chi emette e chi riceve la claim. Per questo motivo lo standard SAML 2.0 fornisce di base un ampio set di tipologie predefinite con lo scopo di standardizzare alcuni tipi di informazioni più comuni. Disporre di tipi condivisi e univocamente definiti da uno standard, permette la comprensione delle informazioni veicolate dalle claim tra sistemi di organizzazioni diverse, senza necessità di doversi intendere a priori sul loro significato.

Entità del modello claim-based

L'attendibilità delle informazioni contenuta nelle claim è legata al concetto di Trust, ovvero la relazione di fiducia che si ha con la fonte di informazione. Il concetto di trust è un elemento fondamentale per un modello claim-based. Senza di esso il modello non avrebbe alcun valore pratico poiché non saremmo in grado di verificare l'attendibilità delle informazioni. Vediamo quindi quali sono le entità coinvolte in uno scenario claim-based e come interagiscono tra di loro per garantire la sicurezza negli accessi.

Col termine Relying Party (RP) si identifica un servizio o un'applicazione web che delega almeno la fase di autenticazione ad una entità esterna che è chiamata Issuing Authority (IA), che rappresenta l'ente di cui ci fidiamo. Il RP espone pubblicamente le policy necessarie all'accesso, ovvero l'insieme delle claim opzionali o obbligatorie che un client deve presentare per ottenere l'accesso. In tal modo quando la Issuing Authority riceve una richiesta di accesso ad un determinato RP riceve contestualmente l'insieme delle claim di cui il client necessita. La IA richiederà al client le credenziali di cui ha bisogno per autenticare il richiedente e se l'esito è positivo potrà fornire al client le claim richieste comprensive dei relativi valori. Contestualmente dovrà fornire una prova che l'autenticazione ha avuto successo. Questo compito spetta ad una componente chiamata Secure Token Service (STS). Un STS è un software in grado di creare un Security Token ovvero un insieme di claim digitalmente firmate con il certificato della IA. Tramite la firma apposta dalla componente STS, il RP è in grado di verificare che un insieme di claim siano attendibili in quanto certificati dalla IA che si considera attendibile.

Un STS può essere esposto, ad esempio, come web service ed in questo caso è direttamente raggiungibile da uno smart client che necessiti di un Secure Token da fornire al servizio al quale voglia accedere. In questo caso il client svolge un ruolo cosiddetto attivo e deve essere in grado di effettuare una chiamata al web service dell'STS. Il client richiede al RP le policy di accesso esposte su uno specifico endpoint e le rigira al STS al quale fornirà anche le credenziali di accesso. L'STS verificherà le credenziali ed emetterà un Security Token che invierà al client. Il client fornirà a sua volta il Security Token al RP ottenendo così l'accesso ai suoi servizi.

Per capire meglio il processo, riportiamo i diversi passaggi nel grafico in Figura 1.

Active

Figura 1  : Scenario di base con l'utilizzo di smart client

 

Non sempre un client è in grado di gestire in autonomia il processo di autenticazione presso un STS. È il caso delle applicazioni web, dove il client è un web browser. In questo scenario, detto passivo, l'autenticazione viene eseguita dalla IA tramite una web application. Il flusso in questo caso è leggermente diverso e prevede l'utilizzo dei meccanismi http per il trasporto delle informazioni. L'utente che vuole accede, indirizzerà il browser all'applicazione web del RP. Se non si è già autenticati, l'applicazione reindirizzerà il browser verso una pagina di accesso esposta dalla Issuing Authority fornendo al contempo le policy di accesso. Tramite la pagina di accesso vengono verificate le credenziali e se l'esito è positivo, verrà effettuata una richiesta interna al dominio della IA verso l'STS per l'emissione del Secure Token da restituire al client. Il processo è schematizzato in Figura 2.

Passive

 Figura 2  : Scenario di base con l'utilizzo di un web browser

Considerazioni finali

 L'impiego del modello claim-based permette di spostare all'esterno le problematiche relative all'autenticazione ed autorizzazione degli accessi. I benefici che si traggono da questo approccio sono molti. Uno dei più ovvi è quello di poter facilmente disporre di un meccanismo di Single Sign On per le nostre applicazioni, ma è solo un aspetto di un quadro ben più complesso. La validità, anche temporale, di un secure token è verificabile in piena autonomia da chi lo riceve senza dover interagire con altri sistemi. Questo vuol dire che le informazioni contenute nel token possono essere propagate su un'intera catena di componenti e sistemi che saranno in grado di considerarle attendibili. Se si pensa ad architetture N-Tier o SOA si capisce meglio il valore di questo approccio che elimina una vasta serie di problematiche. Inoltre, in scenari di sicurezza federata (Federated Security) l'utilizzo del modello claim-based consente l'accesso e la collaborazione tra differenti sistemi informatici anche tra organizzazioni diverse. In questi scenari una tra le caratteristiche fondamentali è la capacità di instaurare una relazione di fiducia con STS esterni. Questo permette ad utenti appartenenti ad organizzazioni diverse l'accesso regolato ai relativi sistemi, senza che si renda necessario il provisioning delle specifiche utenze nei diversi domini.

Nel prossimo articolo cominceremo ad analizzare le caratteristiche specifiche di Windows Identity Foundation e vedremo come utilizzarle per applicare il modello claim-based alle nostre applicazioni.


Tags: WIF

 
x