Il Security Assertion Markup Language (SAML) è un framework standard di sicurezza aperto basato su XML che permette il SSO (Single Sign-On) in modo sicuro in più applicazioni e siti web effettuando l’accesso una sola volta con un solo set di credenziali (nome utente e password).
L’autenticazione e l’autorizzazione viene gestita da due diversi sistemi:
- Service Provider (SP): è il sistema che fornisce il servizio di autenticazione SAML.
- Identity Provider (IdP): è il sistema che identifica e autentica l’utente e allo stesso tempo invia la risposta di autenticazione con i diritti di accesso dell’utente per il servizio al service provider.
Il problema dell’autenticazione
Consideriamo un utente che ha bisogno di accedere ad alcuni servizi web. Ciascun servizio Web dispone del proprio processo di autenticazione e di un provider di identità per l’autenticazione. Quindi l’utente deve memorizzare tante credenziali per quanti sono i servizi web a cui vuole accedere ed è sicuramente più esposto agli attacchi di phishing perché ha a che fare con diversi URL di accesso. Di contro, ogni servizio Web deve mantenere le informazioni dell’utente sul proprio server e compiere degli sforzi per proteggere le informazioni dell’utente e il processo di autenticazione. Allo stesso tempo, le informazioni dell’utente vengono duplicate in molti luoghi.
Con l’utilizzo di un unico Identity Provider usato per conto di tutti i servizi web, risolviamo tutti i problemi. Innanzitutto c’è un solo provider e un solo luogo per l’autenticazione. Quindi non c’è bisogno di mantenere e memorizzare molte credenziali, tutte le informazioni sull’utente vengono mantenute in un unico posto, ci sono meno possibilità di attacchi di phishing perché l’utente deve verificare solo un URL e anche i fornitori di servizi web vengono manlevati dai problemi sulla sicurezza. L’Identity Provider per comunicare con il Service Provider utilizza il linguaggio SAML, che facilita il trasferimento delle informazioni di autenticazione, gli attributi relativi all’utente e gli eventuali problemi di autorizzazione.
Come funziona SAML?
SAML trasferisce l’identità dell’utente da un luogo (l’Identity Provider) a un altro (il Service Provider). Ciò avviene attraverso uno scambio di documenti XML firmati digitalmente.
consideriamo lo scenario seguente: un utente è connesso a un sistema che funge da provider di identità. L’utente desidera accedere a un’applicazione remota, ad esempio un’applicazione di assistenza tecnica o di contabilità (SP). Succede quanto segue:
- L’utente accede all’applicazione remota utilizzando un collegamento, un segnalibro o simili e l’applicazione viene caricata.
- L’applicazione identifica l’origine dell’utente e reindirizza l’utente al Service Provider, chiedendo l’autenticazione con la richiesta di autenticazione (SAML Request).
- L’utente ha una sessione del browser attiva esistente con l’Identity Provider o ne stabilisce una accedendo all’Identity Provider.
- L’Identity Provider crea la risposta di autenticazione (SAML Response) sotto forma di un documento XML contenente il nome utente o l’indirizzo e-mail dell’utente, lo firma utilizzando un certificato X.509 e invia queste informazioni al Service Provider.
- Il Service Provider, che conosce già l’Identity Provider poichè dispone di un’impronta digitale del certificato, recupera la risposta di autenticazione e la convalida utilizzando l’impronta digitale del certificato.
- Viene stabilita l’identità dell’utente e all’utente viene fornito l’accesso all’app.
La richiesta SAML
Nota anche come richiesta di autenticazione, viene generata dal Service Provider per “richiedere” un’autenticazione sotto forma di domanda.
La risposta SAML
Viene generata dall’Identity Provider. Contiene l’effettiva asserzione dell’utente autenticato. Inoltre, la risposta SAML può contenere dati aggiuntivi: a seconda dell’applicazione, alcuni fornitori di servizi potrebbero richiedere un profilo molto semplice (nome utente, e-mail), mentre altri potrebbero richiedere un insieme più ricco di dati utente (codice lavoro, reparto, indirizzo, posizione, manager e così via).
L’asserzione SAML
L’asserzione SAML è un documento XML che contiene i diritti che l’utente ha per accedere al servizio, l’identificazione dell’utente, l’ora, il metodo di autenticazione utilizzato dall’utente, le informazioni sull’utente e così via. L’asserzione SAML viene inviata dall’Identity Provider al Service Provider.