Docs Italia beta

Documenti pubblici, digitali.

3. Modalitá di trasmissione dei messaggi

Il profilo SAML SSO raccomanda l'uso di TLS 1.2; lo scambio dei messaggi tra le entità della federazione può avvenire secondo due modalità:

  • HTTP-POST:

  • HTTP-Redirect:

Le richieste di autenticazione (<samlp:AuthnRequest>) POSSONO essere trasmesse in entrambe le modalitá.

Nota

  • Nel caso di binding HTTP-POST SI DEVE inserire il campo Signature all'interno della richiesta di autenticazione SAML <samlp:AuthnRequest> cosí come specificato nella sezione Protocolli di comunicazione

  • Nel caso di binding HTTP-Redirect il campo Signature NON DEVE essere presente nella richiesta di autenticazione SAML <samlp:AuthnRequest>, ma DEVE essere inserita nella URL come query parameter.

Le risposte inviate dall'Identity Provider (<saml2:Response>), invece, DEVONO essere trasmesse tramite binding HTTP-POST.

3.1. Binding HTTP-POST

In questo tipo di binding, il messaggio HTTP contiene una form HTML all'interno della quale è codificato in formato Base64 il costrutto SAML firmato in accordo alla specifica XML Digital Signature. Il trasporto del messaggio di richiesta di autenticazione prevede due parametri fondamentali:

  • SAMLRequest o SAMLResponse: contengono, rispettivamente, la codifica della <AuthnRequest> e della <Response>

  • RelayState: indica la risorsa originariamente richiesta dall'utente e alla quale dovrà essere trasferito il controllo al termine della fase di autenticazione; puó essere un UUID, un url, un percorso di file o un mini-blob con codifica binaria Base64

La codifica Base64 é richiesta solo per i messaggi del protocollo SAML in formato XML SAMLRequest e SAMLResponse e non per il RelayState, che è un token specifico dell'applicazione usato per identificare lo stato, la cui codifica o decodifica é in carico all'applicazione stessa.

3.2. Binding HTTP-Redirect

Quando si usa un binding di tipo Redirect, la firma viene posta nella URL come query parameter. Tutti i parametri sono URL-encoded. Il messaggio HTTP trasporta i seguenti parametri

  • SAMLRequest: Un costrutto SAML codificato in formato Base64 e compresso con algoritmo DEFLATE. Come da specifica, il messaggio SAML non contiene la firma in formato XML Digital Signature esteso (come avviene in generale nel caso di binding HTTP-POST). La specifica indica come modalità alternativa quella di specificare con parametri aggiuntivi l'algoritmo utilizzato per firmare (SigAlg) e la stringa con la codifica Base64 URL-encoded dei byte del messaggio SAML (Signature).

  • RelayState: Identifica il servizio originariamente richiesta dall'utente e a cui trasferire il controllo alla fine del processo di autenticazione.

  • SigAlg: Identifica l'algoritmo usato per la firma prodotta secondo il profilo specificato per SAML utilizzando chiavi RSA almeno a 1024 bit e algoritmo di digest SHA-256 o superiore;

  • Signature: Contiene la firma digitale della query string, così come prodotta prima di aggiungere questo parametro, utilizzando l'algoritmo indicato al parametro precedente;

3.3. Esempio HTML di utilizzo

Di seguito un esempio di form HTML per trasferire in HTTP-POST la richiesta di autenticazione

 1<html>
 2    <head>
 3        [...]
 4    </head>
 5    <body onload="javascript:document.forms[0].submit()">
 6        <form method="post" action="https://idserver.servizicie.interno.gov.it/idp/profile/SAML2/POST/SSO">
 7            <input type="hidden" name="SAMLRequest"
 8                value="[...]">
 9            <input type="hidden" name="RelayState" value="...">
10            <input type="submit" value="Invia"/>
11        </form>
12    </body>
13</html>

Di seguito un esempio di form HTML per trasferire la risposta in HTTP-POST

 1<html>
 2    <head>
 3        [...]
 4    </head>
 5    <body onload="javascript:document.forms[0].submit()">
 6        <form method="post" action="https://service_provide_assertion_consumer">
 7            <input type="hidden" name="SAMLResponse"
 8                value="[...]">
 9            <input type="hidden" name="RelayState" value="...">
10            <input type="submit" value="Invia"/>
11        </form>
12    </body>
13</html>

La form HTML è corredata da una istruzione che ne provoca il "post" automatico (se Javascript è abilitato nel browser dell'utente) all'indirizzo indicato nell'attributo action. Quindi, il browser dell'utente elabora la risposta HTTP e invia una richiesta HTTP POST verso il servizio dell'entità destinataria.