italia / anpr

Issue tracker e documentazione di ANPR - Anagrafe Nazionale della Popolazione Residente
Creative Commons Attribution 4.0 International
181 stars 49 forks source link

[C019] errore nella creazione del contesto di sicurezza #4319

Closed Davi84 closed 10 months ago

Davi84 commented 10 months ago

Salve, sto chiamando il seguente servizio:

        String audience = "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C019-servizioAccertamentoEsistenzaVita/v1";
        String target = "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002";

ma ottengo il seguente errore:

{
    "detail": "Received request is not conform to the required interoperability profile",
    "govway_id": "811ac70d-ab16-11ee-9d0e-005056ae5232",
    "status": 400,
    "title": "InteroperabilityInvalidRequest",
    "type": "https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html"
}

potete cortesemente darmi qualche dettaglio sull'errore?

grazie

Davi84 commented 10 months ago

ho integrato il digest, ora l'errore è il seguente:

{
    "detail": "Received request is not conform to the required interoperability profile",
    "govway_id": "f39bf0b3-abb4-11ee-93ee-005056ae1884",
    "status": 400,
    "title": "InteroperabilityInvalidRequest",
    "type": "https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html"
}
Davi84 commented 10 months ago

@amollicone1982 questo è l'unico canale per fare questo tipo di verifica?

amollicone1982 commented 10 months ago

Buongiorno, per il momento è questo il canale. Riporto i principali errori: Validazione security token ModI 'INTEGRITY' della richiesta fallita: Riscontrate 3 eccezioni. Header HTTP 'Digest' presente in una richiesta con http payload vuoto Header HTTP 'Digest' possiede un valore non corrispondente al messaggio Claim 'signed_headers' con un formato non valido; atteso un array

Ricordo che è possibile visionare un client di esempio (snippet) al seguente link https://github.com/italia/anpr/issues/3964

Davi84 commented 10 months ago

effettuate le correzioni su signed_headers e digest. ora si presenta il seguente errore:

{ "detail": "Received request is not conform to the required interoperability profile", "govway_id": "d2fd4bd4-ae0c-11ee-88ba-005056ae5232", "status": 400, "title": "InteroperabilityInvalidRequest", "type": "https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html" }

l'hash è calcolato come segue: String body_hash = Base64.getEncoder().encodeToString(digest.digest(body.getBytes(StandardCharsets.UTF_8))); mentre il body è caricato nella request come segue: postLetturaDati.setEntity(new StringEntity(body));

amollicone1982 commented 10 months ago

'Agid-JWT-TrackingEvidence' contenente un claim 'aud' non valido

Davi84 commented 10 months ago

non è questo? image

preso dal servizio: C019-servizioAccertamentoEsistenzaVita-assicurazioni in particolare ho:


String audience = "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C019-servizioAccertamentoEsistenzaVita/v1";
String target = "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002";
amollicone1982 commented 10 months ago

nel token hai messo aud come array

"aud": [ "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C019-servizioAccertamentoEsistenzaVita/v1" ],

Davi84 commented 10 months ago

è una forzatura della libreria jjwt... anche cambiando la modalità di input quando rileva il claim "aud" lo ridefinisce ad array. se forzo e metto "audx" lo restituisce correttamente come stringa singola. strano che non venga accettato. devo trovare un workaround.

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.12.3</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.12.3</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
    <version>0.12.3</version>
    <scope>runtime</scope>
</dependency>
Davi84 commented 10 months ago

risolto, ho dovuto usare il metodo .setAudience(audience), unico problema che è deprecato... ora ho degli errori di merito nella chiamata. grazie mille!

Davi84 commented 10 months ago

non so se fornite supporto anche sulla parte di merito: {"criteriRicerca":{"codiceFiscale":"NRENTN80B22G393L"},"datiRichiesta":{"casoUso":"C019","dataRiferimentoRichiesta":"2024-01-08","motivoRichiesta":"Test Sviluppo"},"idOperazioneClient":"6f41a48f-bfbf-4c32-920a-840c7e08e8ec"}

esito:

{"listaErrori":[{"codiceErroreAnomalia":"999","testoErroreAnomalia":"Operazione non effettuabile","tipoErroreAnomalia":"E"}],"idOperazioneANPR":"0"}

Davi84 commented 10 months ago

trovato: idOperazioneClient troppo lungo (c'è da qualche parte la specifica? ).

vi chiederei se potete fare una modifica e accettare anche il claim "aud" come array di stringhe di lungezza 1 oltre che la semplice stringa singola. In questo modo sarebbe possibile continuare ad usare questa libreria evitando il metodo deprecato.

faccio poi una ulteriore domanda di alto livello: teoricamente dovremmo fare una verifica massiva su circa 1.4 mln di CF in un'unica elaborazione batch. è possibile insistere su questo servizio?

amollicone1982 commented 10 months ago

Ha ragione che manca la specifica sull'idOperazioneClient che ha una lunghezza massima di 100 caratteri. Non possiamo fare alcuna modifica in quanto quello che lei chiede andrebbe contro le linee guida agid che non prevono array (se ci fa caso anche il voucher pdnd non ha array di aud). Per la verifica massiva potreste insistere su questo servizio ma, se non avete tempi stretti, nell'arco di un paio di mesi dovremmo mettere su un e-service che permetta elaborazioni mssive a patire da un elenco di cf

Buona giornata

Davi84 commented 10 months ago

gentilissimo! grazie e altrettanto!