Closed sil-vio closed 1 year ago
Ciao, il problema è l'ordine dei parametri dei query param utilizzati per generare il payload da firmare e da aggiungere al query param Signature. In particolare utilizzando la libreria spid-go, che utilizza la funzione Encode della libreria standard l'ordine dei query param non viene preservato ma ordinato in modo alfabetico, di seguito la signature del metodo :
// Encode encodes the values into ``URL encoded'' form
// ("bar=baz&foo=quux") sorted by key.
func (v Values) Encode() string {
In questo modo RelayState
viene aggiunto prima di SAMLRequest
e questo genera una firma su un payload differente rispetto a quello che si aspetta spid-sp-test
.
spid-sp-test
calcola il payload per la verifica della firma mettendo nel seguente ordine i parametri SAMLRequest
, RelayState
, SigAlg
.
Modificando il codice e forzando l'ordine nel payload da firmare l'errore nel check 23 è sparito. Leggendo qui https://docs.italia.it/italia/spid/spid-regole-tecniche/it/stabile/trasmissione.html# non riesco a capire se l'ordine dei parametri è obbligatorio nel payload di firma e se nella redirect questi possono essere in ordine differente.
Ciao, grazie per questa importante analisi
questa versione appena rilasciata risolve la problematica che ci hai notificato: https://github.com/italia/spid-sp-test/releases/tag/v1.2.12
Ciao, utilizzando il validatore online dell'ambiente demo AGID https://demo.spid.gov.it/validator ho un problema nella verifica della AuthnRequest prodotta.
In particolare con Binding: HTTP-Redirect e seguente request:
Effettuando la validazione ho il seguente check in errore:
23 | AuthnRequest Signature validation | failure - value: Verification Failure
Se interpreto bene le regole tecniche per la AuthnRequest qui :
https://docs.italia.it/italia/spid/spid-regole-tecniche/it/stabile/single-sign-on.html#authnrequest
l'elemento
<Signature>
deve essere presente solo in caso di binding HTTP POST.L'ambiente demo vedo utilizzare: SPID Validator - 1.9.4, SPID SP Test - 1.2.11
La redirect viene fatta passando nella uri sia sigAlg che signature come query param:
I metatada dell'idp di prova sono scaricabili a questa url:
Grazie