SAML (Security Assertion Markup Language) è un protocollo XML-based standardizzato da OASIS per il Single Sign-On (SSO) aziendale. Permette a un Identity Provider (IdP) di autenticare l’utente e di emettere asserzioni — documenti XML firmati digitalmente — che i Service Provider (SP) accettano come prova di identità, senza richiedere una nuova autenticazione per ogni servizio. SAML 2.0 (2005) è lo standard dominante nell’SSO enterprise: Okta, Azure AD, OneLogin, Google Workspace lo supportano come IdP; migliaia di applicazioni SaaS (Salesforce, ServiceNow, GitHub Enterprise, Slack) lo supportano come SP.
Entità e flusso
Identity Provider (IdP): conosce l’utente, gestisce le credenziali, autentica l’utente e firma le asserzioni.
Service Provider (SP): non gestisce credenziali proprie, si fida dell’IdP per l’autenticazione. Riceve e verifica l’asserzione SAML.
Flusso SP-initiated (più comune):
1. Utente accede a app.esempio.it (SP) senza essere autenticato
2. SP genera un AuthnRequest XML e reindirizza l'utente all'IdP
3. IdP autentica l'utente (credenziali aziendali, MFA)
4. IdP genera un'asserzione SAML firmata e la invia al SP (via POST del browser)
5. SP verifica la firma, estrae i claim, autentica l'utente e crea la sessione
Struttura dell’asserzione SAML
Un’asserzione SAML contiene tre tipi di statement:
- Authentication Statement: chi ha autenticato l’utente, quando, con quale metodo (password, MFA, smart card).
- Attribute Statement: attributi dell’utente (email, nome, gruppi di appartenenza, dipartimento) trasmessi allo SP per l’autorizzazione.
- Authorization Decision Statement: (opzionale) se l’IdP vuole comunicare anche una decisione di accesso.
L’asserzione è firmata con la chiave privata dell’IdP; lo SP verifica con la chiave pubblica dell’IdP (scambiata fuori banda via metadati SAML).
Confronto con OpenID Connect
| Aspetto | SAML 2.0 | OpenID Connect |
|---|---|---|
| Formato | XML | JSON/JWT |
| Anno | 2005 | 2014 |
| Complessità | Alta | Bassa |
| Mobile/SPA | Difficile | Nativo |
| Ecosistema | Enterprise legacy | Cloud-native, moderno |
| Binding | HTTP Redirect, POST | HTTP Redirect, Bearer token |
SAML rimane dominante negli ambienti enterprise con applicazioni legacy; OpenID Connect è la scelta per nuovi sistemi e applicazioni moderne.
Vulnerabilità
XML Signature Wrapping (XSW): attacchi che manipolano la struttura XML dell’asserzione spostando il nodo firmato in modo che la firma rimanga valida ma i claim verificati siano diversi da quelli firmati. Richiedono implementazioni SAML con parsing XML rigoroso. Comment injection: inserire commenti XML dentro il campo NameID può causare comportamenti inattesi nei parser. Le librerie SAML certificate sono essenziali; le implementazioni personalizzate del parsing XML sono pericolose.