italia / spid-sp-test

SAML2 SPID/CIE Service Provider validation tool
European Union Public License 1.2
38 stars 17 forks source link

Problemi check codice ipa per Metadata Service Provider Pubblico #156

Closed sil-vio closed 1 year ago

sil-vio commented 1 year ago

Buongiorno,

dobbiamo sviluppare un Service Provider Pubblico per l'ente "Cassa Nazionale di Previdenza e Assistenza Forense" censito su IPA con tipologia "Enti Nazionali di Previdenza ed Assistenza Sociale in Conto Economico Consolidato" e con categoria "Enti di Previdenza ed Assistenza Sociale in Conto Economico Consolidato privati" (pagina dettaglio ipa).

Incontriamo delle difficoltà nella validazione del metadato da noi generato, in particolare non viene superato il check strict di produzione "test 80" che verifica la validità del codice IPA all'interno del metadata. Questo test otteniamo come messaggio di errore "The IPACode element MUST have a valid value present on IPA". Tutti gli altri controlli vengono superati con successo.

Di seguito l'estratto del metadata di tipo Service Provider Pubblico da noi generato in cui è presente il codice IPA dell'ente:


<md:Extensions>
    <spid:IPACode>cnpaf_0</spid:IPACode>
    ...
</md:Extensions>

Da quello che abbiamo visto sembra che in validazione dl codice IPA dell'ente venga fatto una chiamata verso i servizi esposti dall'indice IPA effettuando la ricerca delle AOO per codice Ente. Questo servizio però non restituisce nessuna AOO in quanto gli Enti con categoria "Enti di Previdenza ed Assistenza Sociale in Conto Economico Consolidato privati" per normativa non possono censire le AOO su IPA, come descritto dal seguente spaccato di documentazione IPA che potete trovare su IpaPortale nella sezione Varie nel documento Categorie Enti.

Avevamo aperto una segnalazione sul progetto italia/spid-saml-check (https://github.com/italia/spid-saml-check/issues/240) ma ci è stato indicato di aprire una issue in questo progetto dato che spid-saml-check utilizza questo progetto per la validazione dei metadata.

Grazie

peppelinux commented 1 year ago

Ciao @sil-vio

mi sembra di capire che questa singolarità possa essere risolta in revisione durante l'operazione di onboarding, ti chiedo di sottomettere l'onboarding e di scrivere a spid.tech@agid.gov.it di questa problematica e di mettermi in cc (giuseppe.demarco@teamdigitale.governo.it)

capiremo insieme ai colleghi della AgID come trovare un workaround per questo tipo di caso

peppelinux commented 1 year ago

Ad oggi la soluzione sarebbe quella di modificare il validatore del codice IPA per interrogare una risorsa di indicepa.gov.it che purtroppo ad oggi risulta essere protetta da un codice di autorizzazione

questo implicherebbe che gli utenti che dovessero avere bisogno di questa risorsa protetta dovrebbero registrarsi ed includere l'id di autorizzazione nella chiamata di spid-sp-test, questo rende la configurazione più complessa

ti tengo aggiornato, spero di raggiungerei colleghi della AgID per fare una valutazione sui dati che potrebbero essere aperti ed accessibili senza alcuna forma di autentica

sil-vio commented 1 year ago

Ciao @peppelinux

grazie per la rapida risposta.

Forse una possibile chiamata potrebbe essere quella utilizzata in questa pagina [https://www.indicepa.gov.it/ipa-portale/consultazione/indirizzo-sede/ricerca-ente]().

E' possibile invocare il servizio tramite curl senza nessuna autenticazione:

curl 'https://www.indicepa.gov.it/PortaleServices/api/ente/ricerca'   -H 'Accept: application/json, text/plain, */*'   -H  'Content-Type: application/json'  
--data-raw  
'{
   "paginazione":{
      "campoOrdinamento":"idEnte",
      "tipoOrdinamento":"asc",
      "paginaRichiesta":1,
      "numTotalePagine":null,
      "numeroRigheTotali":null,
      "paginaCorrente":null,
      "righePerPagina":null
   },
   "codiceFiscaleRicerca":null,
   "area":null,
   "denominazione":null,
   "codEnte":"cnpaf_0",
   "idTipoServizioDigitale":null,
   "lingueMinoritarie":null,
   "codiceCategoria":null
}'

Risposta:

{
  "errore": false,
  "risposta": {
    "listaResponse": [
      {
        "idEnte": 2577,
        "codEnte": "cnpaf_0",
        "codiceCategria": null,
        "denominazioneEnte": "Cassa Nazionale di Previdenza e Assistenza Forense",
        "codiceFiscalePG": "80027390584",
        "codiceFiscalePF": null,
        "indirizzo": null,
        "descrizioneToponimo": null,
        "strada": "Via Ennio Quirino Visconti, 8",
        "siglaAutomobilistica": "RM",
        "denominazioneComune": "Roma",
        "area": "Via Ennio Quirino Visconti, 8 - Roma (RM)",
        "tipologiaServizio": null,
        "descrizioneServizio": null,
        "urlServizio": null,
        "numAoo": 0,
        "numOu": 7
      }
    ],
    "paginazione": {
      "campoOrdinamento": "idEnte",
      "tipoOrdinamento": "asc",
      "paginaRichiesta": null,
      "numeroRigheTotali": 1,
      "righePerPagina": 30,
      "paginaCorrente": 1,
      "numTotalePagine": 1
    }
  },
  "descrizioneErrore": null,
  "dettagliErrori": null
}
peppelinux commented 1 year ago

Mi sembra una buona soluzione, giro ai colleghi della AgID per validarla e con il loro ok farò la modifica al codice

peppelinux commented 1 year ago

FYI la funzione in python che fa questa query la trovi qui https://github.com/italia/spid-sp-test/blob/main/src/spid_sp_test/indicepa.py

questa modifica presenta un basso effort dal punto di vista tecnico, dobbiamo solo cambiare l'URL e mappare eventualmente la response

Grazie di cuore per il contributo, spero di poterlo adottare al più presto nella prossima release

sil-vio commented 1 year ago

Si mi torna, avevo indagato un po' nel codice e mi torna con quello che mi dici. Credo basti cambiare la url e la request, il json path della response su cui fare il controllo mi sembra lo stesso:

res["risposta"]["paginazione"]["numeroRigheTotali"]

In caso dimmi che possiamo fare anche un pull request con la modifica, hai già una data per la prossima release?

peppelinux commented 1 year ago

Devo attendere un riscontro della AgID per capire se la risorsa che hai proposto è stabile e sarà mantenuta nel tempo

peppelinux commented 1 year ago

Risolto da https://github.com/italia/spid-sp-test/pull/158