italia / spid-cie-php

Software Development Kit for easy SPID/CIE access integration with simplesamlphp - developed and mantained by Michele D'Amico @damikael
https://italia.github.io/spid-cie-php/
Apache License 2.0
82 stars 39 forks source link

Errore validazione campo public vuoto #84

Closed gpannullo closed 3 years ago

gpannullo commented 3 years ago

Salve a tutti ho un problema con la validazione del mio metadata, di seguito ve ne riporto un estratto: <md:ContactPerson contactType="other"> <md:Extensions> <spid:IPACode xmlns:spid="https://spid.gov.it/saml-extensions">c_a123</spid:IPACode> <spid:Public xmlns:spid="https://spid.gov.it/saml-extensions"/> </md:Extensions> <md:Company>xxxxxxxxxxxxxxxxxxxxxx</md:Company> <md:EmailAddress>xxxxxxxxxxxxxxxxxxxx</md:EmailAddress> <md:TelephoneNumber>xxxxxxxxxx</md:TelephoneNumber> </md:ContactPerson> SPID Tech mi da errore su lo vorrebbe così cioè senza attributo, come faccio? Ho provato a modificare il file in setup/simplesamlphp/simplesamlphp/lib/SimpleSAML/Metadata/SAMLBuilder.php alla riga 724 e togliere l'attributo ma mi da errore, come posso risovere?

Grazie a tutti Giuseppe

ac044 commented 3 years ago

Ciao, per modificare il tag è necessario usere il seguente metodo $ext_elem_type = $ext_dom->createElement('spid:Public'); da inserire al posto di quello nativo da te indicato alla riga 724. Chiedo conferma però a @damikael su questa cosa, essendo la creazione tag e del namespace Public <spid:Public xmlns:spid="https://spid.gov.it/saml-extensions"/> già così da versioni precedenti. Anche io ho una installazione in attesa di verifica ed ho provveduto ad aggiornare secondo quanto da te indicato. Ad ogni modo l'avviso SPID 29 v.3 a pagina 4 specifica che il tag debba essere vuoto.

gpannullo commented 3 years ago

Confermo che fatta la modifica suggerita tutto ha funzionato alla grande, sarebbe bene fare una patch Un ringraziamento a @ac044

damikael commented 3 years ago

Buonasera @gpannullo , @ac044 Il namespace xmlns:spid="https://spid.gov.it/saml-extensions" deve però essere comunque presente. Da esempio su Avviso SPID n.29 viene riportato sull'elemento EntityDescriptor. In SAML il namespace può essere presente anche direttamente sull'elemento che lo riferisce, per questo era stato creato in quel modo. Se il namespace non è presente il metadata avrà problemi nella validazione su xsd. Per essere completamente aderenti all'Avviso SPID n.29 serve trovare il modo per specificare il namespace su EntityDescriptor.

damikael commented 3 years ago

Rif. https://github.com/simplesamlphp/simplesamlphp/issues/1443

gpannullo commented 3 years ago

Ciao @damikael, ti riporto nuovamente il mio metadati generato che viene validato dal validator di agid <md:ContactPerson contactType="other"> <md:Extensions> <spid:IPACode xmlns:spid="https://spid.gov.it/saml-extensions">c_a123</spid:IPACode> <spid:Public/> </md:Extensions> <md:Company>xxxxxxxxxxxxxxxxxxxxxx</md:Company> <md:EmailAddress>xxxxxxxxxxxxxxxxxxxx</md:EmailAddress> <md:TelephoneNumber>xxxxxxxxxx</md:TelephoneNumber> </md:ContactPerson>

Non sono skillatissimo su xml e saml e similari, ma un po a tentativi, così è andato a voi le considerazioni. Vi mando la modifica eseguita:

722: if($details['spid']) { 723: if($details['spid.codeType']=='IPACode') { 724: $ext_elem_code = $ext_dom->createElementNS('https://spid.gov.it/saml-extensions', 'spid:IPACode', details['spid.codeValue']); 725: //$ext_elem_type = $ext_dom->createElementNS('https://spid.gov.it/saml-extensions', 'spid:Public', ''); 726: $ext_elem_type = $ext_dom->createElement('spid:Public'); 727: $eexts[] = new \SAML2\XML\Chunk($ext_elem_code); 728: $eexts[] = new \SAML2\XML\Chunk($ext_elem_type); 729: }

Spero di aver dato il mio piccolo contributo Grazie a tutti e spero di aver risolto

ac044 commented 3 years ago

Buonasera @gpannullo , @ac044 Il namespace xmlns:spid="https://spid.gov.it/saml-extensions" deve però essere comunque presente. Da esempio su Avviso SPID n.29 viene riportato sull'elemento EntityDescriptor. In SAML il namespace può essere presente anche direttamente sull'elemento che lo riferisce, per questo era stato creato in quel modo. Se il namespace non è presente il metadata avrà problemi nella validazione su xsd. Per essere completamente aderenti all'Avviso SPID n.29 serve trovare il modo per specificare il namespace su EntityDescriptor.

Completamente d'accordo, la stranezza è quanto segnalato da @gpanullo in merito al mancato superamento della verifica tecnica per questo motivo. Con la notazione che ho suggerito il namespace sull'EntityDescriptor è comunque generato. Su versioni precedenti della libreria, per SP privato ho dovuto manualmente intervenire sul metodo getEntityDescriptor() per inserirlo invece.

gpannullo commented 3 years ago

Buongiorno a tutti, con il metadati così come vi ho mostrato mi hanno validato la richiesta e quindi sono online. Sono 2 mesi che lotto per avere questa validazione alla fine volevano il campo senza nulla e gliel'ho dato... Per i PUBLIC ma credo anche per i PRIVATE esiste questo "problema", io proporrei la modifica del codice così come ho documentato qualche post prima, se volete vi preparo una pull request

Grazie nuovamente a tutti per la disponibilità ed il tempo dedicatomi

damikael commented 3 years ago

Grazie @gpannullo ma la modifica non sarebbe corretta. Il metadata è corretto sia se la definizione del namespace è sull'elemento root, sia se è sull'elemento stesso (Public). Eliminando la definizione del namespace dall'elemento Public, continua a funzionare perchè, avendolo inserito precedentemente su IPACode, è stato riportato anche sull'elemento root. Tuttavia, ciò non è corretto in senso stretto. È invece corretto che il namespace venga specificato anche nel caso in cui IPAcode non sia presente.