italia / spid-testenv2

New test Identity Provider for SPID
GNU Affero General Public License v3.0
35 stars 38 forks source link

L'Idp non recupera il metadata dal database #318

Closed AntonioGiovanniSchiavone closed 3 years ago

AntonioGiovanniSchiavone commented 3 years ago

Buongiorno,

Dopo aver caricato il metadata sul Database della versione on line dell'Idp di Test (https://idp.spid.gov.it/admin/databasesprecord/), e inviando una AuthnRequest verso tale Idp, si ottiene in risposta una pagina di errore con la dicitura

 'L'entity ID {mioentityID} indicato nell'elemento <Issuer> non corrisponde a nessun Service Provider registrato in questo Identity Provider di test.' 

Specifico che ho verificato che l'entityID presente nella AuthnRequest fosse quello corretto e che il metadata è già stato preventivamente analizzato con SPID SAML Check, risultando valido anche nei confronti dell'avviso 29.

L'ipotesi è che, per motivi da chiarire, l'Idp non recuperi i metadata dal Database.

peppelinux commented 3 years ago

Ciao Giovanni, se fai il setup in locale sicuramente conseguirai i test. Com'è noto questa piattaforma è sconsigliata per la messa in produzione ma grazie comunque del feedback, tenterei con i colleghi in agid di capire quali problemi possano esserci con l'attuale configurazione del db

peppelinux commented 3 years ago

Prova a rimuovere encoding e standalone dall'intestazione dellxml, fai una prova e facci sapere

Grazie Antonio

AntonioGiovanniSchiavone commented 3 years ago

Buongiorno Giuseppe,

Ho provato a modificare l'intestazione, ma la situazione non cambia.

Ho notato che oggi su un altro repository un altro utente ha evidenziato la stessa problematica, quindi credo sia un problema non limitato al mio caso, ma più generale.

peppelinux commented 3 years ago

Ciao Giovanni, sentiti libero di condividere qui il tuo metadata, faremo un riscontro con quello che ad oggi AgID carica su basedati e andremmo in due direzioni:

  1. copertura del caso d'uso con unit test lato spid-testenv2
  2. istruzione della problematica (da rendere nota) lato AgID

quello che ti succede è dovuto ad una validazione fallita del metadata, nello specifico guarda qui: https://github.com/italia/spid-testenv2/blob/a499c1b08763acb11373b6384fd1f5d89bda5ff8/testenv/utils.py#L88

e prova a fare questo

from lxml import objectify
objectify.fromstring(xmlstr_tuo_metadata)

di certo avrai modo di svelare questo arcano e se avessi voglia di fare una PR sappi che gli darei massima priorità. So che sei pythonista :)

a pre e grazie per l'effort

gozus19p commented 3 years ago

Buongiorno,

mi inserisco in questa issue poiché anche io sto riscontrando il medesimo problema sollevato da @AntonioGiovanniSchiavone. Il messaggio d'errore che ci perviene è il medesimo:

L'entity ID "https://test-peppol-smpw.regione.emilia-romagna.it" indicato nell'elemento <Issuer> non corrisponde a nessun Service Provider registrato in questo Identity Provider di test.

Allego in questa sede il metadata-signed.zip che abbiamo registrato sul database. Ho provato ad eliminare l'encoding, ad eliminare l'intero prologo XML, ma il problema persiste. Si tratta forse di un problema di altra natura?

Rimango a disposizione per approfondimenti. Auguro una buona giornata.

peppelinux commented 3 years ago

ciao @gozus19p

prova a seguire le istruzioni

from lxml import objectify
objectify.fromstring(xmlstr_tuo_metadata)

e di certo riuscirai a capire il problema. @damikael sarebbe utile fare questa validazione direttamente nel form di submission del metadata, così da offrire le informazioni di errore all'utente

AlessandraB19 commented 3 years ago

Buongiorno, sto riscontrando lo stesso errore, pur utilizzando l'IDP di test

L'entity ID "https://spid.composingstudio.com" indicato nell'elemento non corrisponde a nessun Service Provider registrato in questo Identity Provider di test.

Potrei avere maggiori dettagli? Grazie

peppelinux commented 3 years ago

Carissimi, questo repository non riguarda la disponibilità o il funzionamento di un servizio in hosting da terze parti. Come è specificato nel Readme di questo progetto, questo progetto non è stato assolutamente pensato per la messa in produzione. In queste issues vogliamo raccogliere e collezionare le problematiche tecniche, pertanto vi chiedo gentilmente di dare seguito alle indicazioni già condivise per la diagnosi del problema e condividere le informazioni, le issue di questo repository vogliono essere esclusivamente di carattere tecnico, non è un ticket service per finalità terze.

Se fate il test che vi ho indicato e condividete l'errore state certi che avremo modo di analizzare insieme ai colleghi che si occupano dell'hosting quale possa essere la soluzione da adottare.

Sono problemi ben noti, e riguarderebbero la validazione in input in fase di sottomissione del metadata via web

peppelinux commented 3 years ago

@AlessandraB19 i metadata sono in formato file o su db? che errori leggi nel log (standard output su terminale) del tuo spid-testenv2?

AlessandraB19 commented 3 years ago

@AlessandraB19 i metadata sono in formato file o su db? che errori leggi nel log (standard output su terminale) del tuo spid-testenv2?

Ho caricato i metadata sul db e infatti il mio SP è presente nell'elenco consultabile su http://idptest.spid.gov.it/ e questo è l'errore che vedo GET https://spid.composingstudio.com/myservice/spid-idp-dummy.svg 404 (Not Found)

peppelinux commented 3 years ago

@AlessandraB19 l'errore lo leggi nei logs di spidtestenv2. Se esegui via docker fai attach e leggerai lo stdout, con il messaggio di errore. Semplicemente: sta fallendo la validazione del matadata.

Cmq tra qualche oretta avrò le mani libere per finalizzare una validazione dei metadata in fase di sottomissione. Così da avere un messaggio umano e a schermo, a pre

AntonioGiovanniSchiavone commented 3 years ago

Ciao Giovanni, sentiti libero di condividere qui il tuo metadata, faremo un riscontro con quello che ad oggi AgID carica su basedati e andremmo in due direzioni:

  1. copertura del caso d'uso con unit test lato spid-testenv2
  2. istruzione della problematica (da rendere nota) lato AgID

quello che ti succede è dovuto ad una validazione fallita del metadata, nello specifico guarda qui: https://github.com/italia/spid-testenv2/blob/a499c1b08763acb11373b6384fd1f5d89bda5ff8/testenv/utils.py#L88

e prova a fare questo

from lxml import objectify
objectify.fromstring(xmlstr_tuo_metadata)

di certo avrai modo di svelare questo arcano e se avessi voglia di fare una PR sappi che gli darei massima priorità. So che sei pythonista :)

a pre e grazie per l'effort

Ciao Giuseppe, Il problema sembra essere concettualmente simile a quanto indicato nella issue 146, ma applicato al metadata invece che ai messaggi SAML. Seguendo il tuo suggerimento, ho scritto il segunte script Python:

from lxml import objectify
import urllib.request as ur

with open('metadata.xml', 'r' )  as file:
    data = file.read()
    objectify.fromstring(data)

Ottenendo l'errore:

ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

Tuttavia, sostituendo l'ultima istruzione con

    objectify.fromstring(data.encode())

Il metadata viene parsato correttamente.

Si potrebbe proporre quindi modificare l'idp per forzare l'encoding della stringa rappresentante il metadata, o meglio ancora, verificare la presenza di una dichiarazione di encoding e, nel caso, forzare l'encoding seconda tale dichiarazione.

peppelinux commented 3 years ago

@AntonioGiovanniSchiavone ottimo spunto a questa tua integrazione aggiungerei anche la validazione del form, così che in caso di errori gli utenti non debbano farsi script! :laughing:

peppelinux commented 3 years ago

fixed qui https://github.com/italia/spid-testenv2/commit/c9fe627030591d434a8dcc46abeea34ed8bbf24a