Lab · 06 / 16
Un login, tante app.
Il protocollo dietro gran parte del SSO aziendale. Il browser trasporta XML firmato tra l’app e l’IdP, e l’app non parla mai direttamente con l’IdP.
- Browser
- dove sei tu
- SP
- service provider: l’app che apri
- IdP
- identity provider: dimostra chi sei
- GET /dashboard
Passo 1 di 5
Nessuna sessione nell’app
In parole semplici Bussi alla porta dell’ufficio, ma non hai ancora il badge.
L’utente apre una pagina del service provider (SP). Non c’è un cookie di sessione, quindi l’SP deve chiedere all’IdP chi è.
- 302 → SAMLRequest
Passo 2 di 5
AuthnRequest attraverso il browser
In parole semplici L’ufficio ti dà una busta chiusa da portare all’ufficio badge.
L’SP crea una AuthnRequest, la comprime e la codifica, e reindirizza il browser all’IdP. RelayState ricorda dove voleva andare l’utente.
GET https://idp.example.com/sso/saml ?SAMLRequest=fZJNT8MwDIb/SpV7m6RfqNHaaWyoiAuTKA... (deflate + base64) &RelayState=/dashboard <samlp:AuthnRequest ID="_a1b2c3" Version="2.0" Destination="https://idp.example.com/sso/saml" AssertionConsumerServiceURL="https://app.example.com/saml/acs"> <saml:Issuer>https://app.example.com</saml:Issuer> </samlp:AuthnRequest> - password + codicefirma con passkey
Passo 3 di 5
L’utente accede una volta sola
In parole semplici All’ufficio badge mostri il documento una volta. La volta dopo ti riconoscono già.
L’IdP autentica l’utente, con MFA se la policy lo richiede. Se l’utente ha già una sessione sull’IdP, questo passo si salta: è il "single" di single sign-on.
- POST /saml/acs · SAMLResponse
Passo 4 di 5
Asserzione firmata verso l’app
In parole semplici Riporti una lettera con un timbro ufficiale che dice chi sei.
L’IdP restituisce un form che si invia da solo e consegna la risposta firmata all’Assertion Consumer Service dell’SP. L’SP controlla firma, Issuer, Audience, Destination, InResponseTo e la scadenza NotOnOrAfter.
<saml:Assertion ID="_d4e5f6" IssueInstant="2026-10-19T10:00:00Z"> <saml:Issuer>https://idp.example.com</saml:Issuer> <ds:Signature>…</ds:Signature> <saml:Subject> <saml:NameID Format="…:emailAddress">ada@example.com</saml:NameID> <saml:SubjectConfirmationData InResponseTo="_a1b2c3" NotOnOrAfter="2026-10-19T10:05:00Z" Recipient="https://app.example.com/saml/acs"/> </saml:Subject> <saml:Conditions><saml:AudienceRestriction> <saml:Audience>https://app.example.com</saml:Audience> </saml:AudienceRestriction></saml:Conditions> <saml:AttributeStatement> <saml:Attribute Name="groups"><saml:AttributeValue>finance</saml:AttributeValue></saml:Attribute> </saml:AttributeStatement> </saml:Assertion> - Set-Cookie · 302 /dashboard
Passo 5 di 5
Sessione creata
In parole semplici L’ufficio ti dà il tuo badge: da ora entri e basta.
L’SP crea la sua sessione e manda l’utente a RelayState. I gruppi dell’asserzione possono decidere i ruoli nell’app. Uscire dall’SP non chiude la sessione sull’IdP, a meno che non sia configurato il single logout.
Flusso completato.
Domini e valori d’esempio. Nulla esce dal tuo browser.