# XACML

XACML (eXtensible Access Control Markup Language) è uno standard pubblicato da OASIS (Organization for the Advancement of Structured Information Standards) che definisce un linguaggio per la definizione di politiche di controllo degli accessi in formato XML, e illustra come valutare le richieste di autorizzazione. La versione attualmente stabile è la 3.0 del gennaio 2013.
Il linguaggio si basa su un processo di valutazione in stile Policy Based Access Control (PBAC). Le singole policy applicano il modello Attribute Based Access Control (ABAC). Poiché la definizione dello standard è XML, il linguaggio può essere implementato per qualsiasi architettura.
Lo standard XACML si basa sulla definizione di policy per il controllo degli accessi a risorse. La richiesta di accesso è definita con una richiesta XACML e l'esito del processo di decisione autorizzativa è dato dalla combinazione delle regole (rules) definite nelle politiche (policies) applicabili a tale richiesta.
Nella nuova versione, a differenza della precedente, l'esito dell'autorizzazione dipende maggiormente dal contesto di valutazione della richiesta, nel dettaglio mediante azioni e/o informazioni aggiuntive fornite dalle obligation e dagli advice; altre differenze di sintassi, principalmente per migliorare l'efficienza di scrittura, sono presentate in seguito, insieme al modello applicativo dello standard.

## Storia

La versione 1.0 è stata rilasciata da OASIS nel 2003.
La versione 2.0 è stata rilasciata da OASIS il 1 febbraio 2005.
La prima specifica del comitato XACML 3.0 è stata pubblicata il 10 agosto 2010. La versione più recente - XACML 3.0 - è stata standardizzata nel gennaio 2013.

## Architettura

Il linguaggio XACML definisce due categorie di entità, entrambe definite da un Uniform Resource Identifier:
* Subject: ovvero l'elemento che richiede l'accesso (es. Utenti, Computer, Servizi web...).
* Resources: cioè gli elementi a cui il Subject vuole accedere (es. File, Documenti, Database...).
Per svolgere la sua funzione, XACML ha bisogno di vari componenti logici che svolgono funzioni separate:
* PEP: il Policy Enforcement Point, il quale protegge una risorsa e ne permette l'accesso solo se la verifica di compatibilità con la policy è positiva.
* PDP: Policy Decision Point, il quale riceve tutti i vari parametri (Policy, Soggetto, Risorsa richiesta, Tipo di accesso, Contesto...) e decide se concedere o meno l'accesso. Presa la decisione, questa sarà comunicata al PEP.
* PIP: Policy Information Point, fornisce le informazioni relative all'accesso richiesto.
* PAP: Policy Access Point, fornisce la policy applicabile all'accesso richiesto.

## Elementi della Policy

Ogni Policy è formata da alcuni elementi:
* Una o più Rule, ovvero la singola regola nella politica. Essa a sua volta è formata da:
** L’effetto della regola (permit/deny).
** La condizione da verificare (opzionale).
* Il Target, usato per controllare l’applicabilità della richiesta ed indicizzare le varie policy per il PDP. Contiene:
** Uno o più Soggetti, può contenere l’elenco degli attributi legato al soggetto al quale è rivolta la policy.
** Un'Azione, ciò che la policy permette di fare (view, execute, ecc).
** Le Risorse, cioè il riferimento alle risorse da proteggere (URI).

## Funzionamento

Il tipico funzionamento dello schema XACML è il seguente:
Un soggetto (ad es. un Utente) vuole accedere a delle informazioni presenti su un Database. Per far ciò, deve comunicare al PEP la sua identità, la risorsa a cui vuole accedere e l'operazione che vuole fare (Lettura, Scrittura...).
Il PEP, ricevuta la richiesta, la congela temporaneamente e consulta (attraverso un "traduttore di richiesta") il PDP. Il traduttore è necessario in quanto ogni richiesta deve essere "contestualizzata" insieme alle informazioni provenienti dal PIP. Queste informazioni sono comunicate con un linguaggio apposito detto Security Assertion Markup Language.
Il PDP, a sua volta, richiede la corrispondente policy di sicurezza al PAP, il quale avendo accesso al Policy Repository potrà fornire le informazioni necessarie. Il PDP, avendo ora a disposizione tutti gli elementi (la richiesta, il contesto e la policy di sicurezza) deciderà se consentire o meno l'accesso e comunicherà il risultato al PEP.
Il PEP, ricevuta la decisione del PDP, autorizzerà (o bloccherà) l'accesso dell'utente alla risorsa.