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

[C003][Collaudo] Problemi invocazione webservice #4234

Closed TheVise1975 closed 11 months ago

TheVise1975 commented 1 year ago

Buongiorno, sto provando ad eseguire l'integrazione con il servizio C003-servizioVerificaDichGeneralita-approvazione_automatica, v. 2 in ambiente di collaudo tramite il passaggio attraverso PDND.

Sto eseguendo l'integrazione in .NET, per cui il codice riportato sotto riguarda questa implementazione. Ho configurato la finalità e l'e-service su PDND e ottenuto le "chiavi" per invocare il servizio.

L'url di audience che dovrei richiamare alla fine è: https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C003-servizioVerificaDichGeneralita/v1

Il json della mia richiesta è questo:

{ "idOperazioneClient": "1", "criteriRicerca": { "codiceFiscale": "XXXXXX11X22X123X" }, "datiRichiesta": { "dataRiferimentoRichiesta": "2023-11-15", "motivoRichiesta": "1", "casoUso": "C003" } }

Per prima cosa ho predisposto la chiamata di audit

    var headersRsa = new Dictionary<string, object>
    {
        { "kid", _keyId },
        { "alg", "RS256" },
        { "typ", "JWT" }
    };

    // Create an assertion for audit
    Guid jti = Guid.NewGuid();
    var auditPayload = new Dictionary<string, object>

{ { "iss", _iss }, { "sub",_sub}, { "aud", audience }, { "userID", userId }, { "userLocation", location }, { "LoA", loa }, { "purposeId", _purposeId }, { "dnonce", dnonce }, { "jti", jti.ToString() }, { "iat", iat }, { "exp", exp} };

L'ho firmato con la mia chiave privata (associata all'e-client) e successivamente calcolato lo SHA256.

Ho quindi richiesto il voucher a PDND andando a chiamare l'url auth.uat.interop.pagopa.it/client-assertion

var payload = new Dictionary<string, object>
{
    { "iss", _clientId},
    { "sub", _clientId },
    { "aud", "auth.uat.interop.pagopa.it/client-assertion"},
    { "purposeId", _purposeId },
    { "jti", jti.ToString() },
    { "userID", userId },

{ "userLocation", location }, { "LoA", loa }, { "dnonce", dnonce }, { "iat", iat }, { "exp", exp}, { "digest", new Dictionary<string, object> { { "alg", "SHA256" }, { "value", auditHash } } } };

ho calcolato lo sha256 del payload. (_payloadHash) ho calcolato lo sha256 del JSON di richiesta (encodedBody)

Una volta ricevuto il TOKEN ho eseguito la chiamata al servizio C003 sono andato ad eseguire la chiamata al servizio

string myUrl = "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C003-servizioVerificaDichGeneralita/v1/anpr-service-e002"; WebRequest request = WebRequest.Create(myUrl); request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("Authorization", "Bearer " + token); request.Headers.Add("Agid-JWT-Signature", _payloadHash); request.Headers.Add("Agid-JWT-TrackingEvidence", auditHash); request.Headers.Add("Digest", "SHA-256=" + encodedBody);

using (Stream dataStream = request.GetRequestStream()) { byte[] byteArray = Encoding.UTF8.GetBytes(jsonRequest); dataStream.Write(byteArray, 0, byteArray.Length); }

Tuttavia la chiamata non mi va a buon fine, ottengo un HTTP Error 400 con la seguente motivazione

{"type":"https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html","title":"InteroperabilityInvalidRequest","status":400,"detail":"Received request is not conform to the required interoperability profile","govway_id":"a0684398-8231-11ee-bb73-005056ae1884"}

Potreste gentilmente indicarmi cosa non è corretto?

grazie

TheVise1975 commented 12 months ago

Ho fatto una prova anche oggi, cambiando alcune cose sulla "segnature", ma ricevo ancora questo errore:

{"type":"https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html","title":"InteroperabilityInvalidRequest","status":400,"detail":"Received request is not conform to the required interoperability profile","govway_id":"20b2f97c-8459-11ee-b400-005056ae1884"}

rglauco commented 11 months ago

Il servizio C003 prevede dati diversi in criteriRicerca:

  • codice fiscale
  • nome
  • cognome
  • sesso
  • data di nascita
  • luogo di nascita: comune o stato oppure:
  • idANPR

quelli che stai usando adesso sono idonei, ad esempio, per il servizio C001, dove puoi interrogare per CF:

  • codice fiscale oppure:
  • nome
  • cognome
  • sesso
  • data di nascita
  • luogo di nascita: comune o stato oppure:
  • idANPR

Fai riferimento alle specifiche dei singoli servizi ANPR che trovi in PDND

amollicone1982 commented 11 months ago

Il problema dovuto al fatto che il token di integrity non è corretto Token senza claim 'signed_headers'

Quello che possiamo dare è un esempio di client che implementa i profili di cui Anpr necessita.

https://github.com/italia/anpr/issues/3964

TheVise1975 commented 11 months ago

Il servizio C003 prevede dati diversi in criteriRicerca:

  • codice fiscale
  • nome
  • cognome
  • sesso
  • data di nascita
  • luogo di nascita: comune o stato oppure:
  • idANPR

quelli che stai usando adesso sono idonei, ad esempio, per il servizio C001, dove puoi interrogare per CF:

  • codice fiscale oppure:
  • nome
  • cognome
  • sesso
  • data di nascita
  • luogo di nascita: comune o stato oppure:
  • idANPR

Fai riferimento alle specifiche dei singoli servizi ANPR che trovi in PDND

Per caso hai un JSON di prova ?

TheVise1975 commented 11 months ago

Il problema dovuto al fatto che il token di integrity non è corretto Token senza claim 'signed_headers'

Quello che possiamo dare è un esempio di client che implementa i profili di cui Anpr necessita.

3964

Io ho dato un'occhiata al client java, da cui ho provato a implementare la mia versione C#...ma se il java funziona (non ho testato) e il mio no...qualcosa vuol dire che l'ho persa per strada...

Esiste una versione declinata per il servizio C003?

Per quanto riguarda gli altri servizi del Ministero, esiste qualcosa che a fronte del codice fiscale mi restituisce i dati anagrafici e residenza?

Grazie V.

TheVise1975 commented 11 months ago

Una cosa tipo questa?

{ "idOperazioneClient":"1", "criteriRicerca":{ "codiceFiscale":"STTSGT90A01H501J", "cognome":"SOGGETTO", "nome":"SETTIMO", "sesso":"M", "datiNascita":{ "dataEvento":"1990-01-01", "luogoNascita":{ "comune":{ "nomecomune":"ROMA", "siglaProvinciaIstat":"RM" } } } }, "datiRichiesta":{ "dataRiferimentoRichiesta":"2023-11-23", "motivoRichiesta":"PROT.NUM.12345", "casoUso":"C003" }

amollicone1982 commented 11 months ago

es. C003

{

"idOperazioneClient": "0",

 "criteriRicerca": {
      "codiceFiscale": "DLDRND00R10C573B"
    },
    "verifica": {
      "generalita": {
        "codiceFiscale": {
          "codFiscale": "DLDRND00R10C573B"
        },
        "cognome": "DEL DEO",
        "nome": "ARMANDO",
        "sesso": "M",
        "dataNascita": "2000-10-10+02:00",
        "luogoNascita": {
          "comune": {
            "nomeComune": "CESENA",
            "codiceIstat": "040007",
            "siglaProvinciaIstat": "FC"
          }
        }
      }
    },

"datiRichiesta": { "dataRiferimentoRichiesta": "2021-12-13", "motivoRichiesta": "1", "casoUso": "C003" } }

Ripeto che i problemi che hai sono dovuti ai token. Non sei ancora arrivato a problemi sul payload della richiesta. Il client java, se sostituisci tutte le info in pdnd.properties (clientid, purposeid del c003 etc.) e nel file test incolla una richiesta di C003 (vedi sopra) vedrai che funziona. Lo hanno provato già in tanti

TheVise1975 commented 11 months ago

Premessa, ho configurato il client JAVA e con il JSON che mi hai girato funziona.

Adesso veniamo alle note dolenti, ho ricreato passo passo la generazione dei token in C# e ottengo ancora un http400.

Premesso che l'header è sempre { "kid": "ROwdvbcXiCzbzuzKkLTsl4DVD7_fWZA535wmhddRur8", "alg": "RS256", "typ": "JWT" }

Questo è il mio token AGID-JWT-TrackingEvidence eyJraWQiOiJST3dkdmJjWGlDemJ6dXpLa0xUc2w0RFZEN19mV1pBNTM1d21oZGRSdXI4IiwiYWxnIjoiUlMyNTYiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiIwMzM5OWNiMi0xYmM5LTQ1Y2YtODRlYi0xZTI3MWQyYzU5MWYiLCJwdXJwb3NlSWQiOiIyNDNkODEwYi1lZTNjLTRlNGItYmYxYS01N2QwZjBlMjk3ZDIiLCJkbm9uY2UiOiIxMjM0NTY3ODkwMTIzIiwidXNlcklEIjoiVXNlcjEyMyIsInVzZXJMb2NhdGlvbiI6IjI2LjIuMTIuMjMiLCJMb0EiOiJMT0EzIiwiYXVkIjoiaHR0cHM6Ly9tb2RpcGEtdmFsLmFucHIuaW50ZXJuby5pdC9nb3Z3YXkvcmVzdC9pbi9NaW5JbnRlcm5vUG9ydGFBTlBSL0MwMDMtc2Vydml6aW9WZXJpZmljYURpY2hHZW5lcmFsaXRhL3YxIiwiaXNzIjoiN2RlNzBiODQtZWJlOS00ZWI0LWI0MWYtNDViZjdkZjBhODcxIiwic3ViIjoiN2RlNzBiODQtZWJlOS00ZWI0LWI0MWYtNDViZjdkZjBhODcxIiwiaWF0IjoxNzAxMzQ0MTU3LCJuYmYiOjE3MDEzNDQxNTcsImV4cCI6MTcwMTM0NDQ1N30.U4Ht82QAnsKREpFY16eJMBWEy8-h6nw4ub4wJFrsYKiGvJSvqtUcnYXmpL3kwQ5pGF7ie2tWBHx0T_0YQ_Q7IHYZuhvdtXHYCULKFBDnqAyiwHGZ3uz5O9Ubosv8oDlysO80pRuSuHbTCsX-hspLlBNr7YESDU5BQpruvrpSXScnuqchEkZDrSEvbS3BIg2Pp2K0nYA1iullykT-v34nE9RDPACcO5P6aoRSfvyB9PAW3Z0KihQL461O5xkDHVl99Mf1wNlcFsHSzsiLcWy9BL13ctNOsvIMrG2eDNn73guU7SXsjRUAzfYrtd2YTuW9ndfkQTU7F-ZUwlqmOi7Jiw

Corrispondente a: PAYLOAD { "jti": "03399cb2-1bc9-45cf-84eb-1e271d2c591f", "purposeId": "243d810b-ee3c-4e4b-bf1a-57d0f0e297d2", "dnonce": "1234567890123", "userID": "User123", "userLocation": "26.2.12.23", "LoA": "LOA3", "aud": "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C003-servizioVerificaDichGeneralita/v1", "iss": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "sub": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "iat": 1701344157, "nbf": 1701344157, "exp": 1701344457 }

Ho calcolato l'impronta SHA256 e costruito il token per PDND 072717d04b7a034e47c4b04a2b5e5920401b8de748e2382e3c22ca03fa1e87e0

Questo è il mio "assertion" per PDND eyJraWQiOiJST3dkdmJjWGlDemJ6dXpLa0xUc2w0RFZEN19mV1pBNTM1d21oZGRSdXI4IiwiYWxnIjoiUlMyNTYiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJhdXRoLnVhdC5pbnRlcm9wLnBhZ29wYS5pdC9jbGllbnQtYXNzZXJ0aW9uIiwiaXNzIjoiN2RlNzBiODQtZWJlOS00ZWI0LWI0MWYtNDViZjdkZjBhODcxIiwic3ViIjoiN2RlNzBiODQtZWJlOS00ZWI0LWI0MWYtNDViZjdkZjBhODcxIiwicHVycG9zZUlkIjoiMjQzZDgxMGItZWUzYy00ZTRiLWJmMWEtNTdkMGYwZTI5N2QyIiwianRpIjoiNWMyMGNmMTktMzUwZC00YjcxLTlmNDUtMDhjNzE2N2RmYjQyIiwiaWF0IjoxNzAxMzQ0MTU5LCJleHAiOjE3MDE0MDQxNTksImRpZ2VzdCI6eyJhbGciOiJTSEEyNTYiLCJ2YWx1ZSI6IjA3MjcxN2QwNGI3YTAzNGU0N2M0YjA0YTJiNWU1OTIwNDAxYjhkZTc0OGUyMzgyZTNjMjJjYTAzZmExZTg3ZTAifX0.CNhzh-zmWYkzolxHtTcyoJwvqmbce-22XNuu1qf7WcwAC0v_3rDdOLBLJyapNi5V2s-LCAeb54HzQeutn_6YN0RKenvkjs5IstXNxlb3TqPSft__xbmG0vrwpR8cv131-Id1w5ZwOAsJzVDo5I6hg82ZxEU1qE6ZldNpVn7O3tXxk-fPMPHqDaUZgHm_bwiWbiFm1BFdBDkjgQw2YN8kMG8JpOVx6LdK2I-q8ZEaaroawB1gJ5Zm6YSUT1T-lWnWUMu1vo2WO5AKStXraEbpkrxt6X-6WFncBx65hTUWeJ8LEW6HtRoCg3wskKF3n27X1Z_rFFx_J-H8qFHR1chH8Q

corrispondente a { "aud": "auth.uat.interop.pagopa.it/client-assertion", "iss": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "sub": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "purposeId": "243d810b-ee3c-4e4b-bf1a-57d0f0e297d2", "jti": "5c20cf19-350d-4b71-9f45-08c7167dfb42", "iat": 1701344159, "exp": 1701404159, "digest": { "alg": "SHA256", "value": "072717d04b7a034e47c4b04a2b5e5920401b8de748e2382e3c22ca03fa1e87e0" } }

PDND Risponde e mi restituisce il voucher eyJ0eXAiOiJhdCtqd3QiLCJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsImtpZCI6IjMyZDhhMzIxLTE1NjgtNDRmNS05NTU4LWE5MDcyZjUxOWQyZCJ9.eyJhdWQiOiJodHRwczovL21vZGlwYS12YWwuYW5wci5pbnRlcm5vLml0L2dvdndheS9yZXN0L2luL01pbkludGVybm9Qb3J0YUFOUFIvQzAwMy1zZXJ2aXppb1ZlcmlmaWNhRGljaEdlbmVyYWxpdGEvdjEiLCJzdWIiOiI3ZGU3MGI4NC1lYmU5LTRlYjQtYjQxZi00NWJmN2RmMGE4NzEiLCJuYmYiOjE3MDEzNDA1NjAsImRpZ2VzdCI6eyJhbGciOiJTSEEyNTYiLCJ2YWx1ZSI6IjA3MjcxN2QwNGI3YTAzNGU0N2M0YjA0YTJiNWU1OTIwNDAxYjhkZTc0OGUyMzgyZTNjMjJjYTAzZmExZTg3ZTAifSwicHVycG9zZUlkIjoiMjQzZDgxMGItZWUzYy00ZTRiLWJmMWEtNTdkMGYwZTI5N2QyIiwiaXNzIjoidWF0LmludGVyb3AucGFnb3BhLml0IiwiZXhwIjoxNzAxMzQxMTYwLCJpYXQiOjE3MDEzNDA1NjAsImNsaWVudF9pZCI6IjdkZTcwYjg0LWViZTktNGViNC1iNDFmLTQ1YmY3ZGYwYTg3MSIsImp0aSI6ImU5ZTA5ODgxLWEyNWItNGYzYS04MmMyLWExNWUzODgyZGM4ZCJ9.nl-1FBlmsoOVbr567T9OvOILdTwUR_TC6uu9hPiEl9XsyEKDkyfgD4UpUwChk5itDJxH868mwSDBapLma-NMLIhiZcSdqs3xaseScnxpl7RlHx6VYSSn1UZhTRJtyROiCBPYwu7uMC5tHHD0jXYgBS-HCF_0_1JL86jdbAdQ1UVzar4E8yiYmhQNPt4-GYwcjitZnUVwy92bspduKGJ26TnnmdDJ6teQ06Y02TZIpQWvy7x5mWacJloo1dT3J3xJ4BA3FPHoXfQqwGi0bqbavaKTpZ7zWTZfE1DY5u0YlrxvXSZdNRR5sJsJBTzb6wnTV6QUZ7i2pVzIQCrV5gyqGg

Corrispondente a: { "aud": "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C003-servizioVerificaDichGeneralita/v1", "sub": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "nbf": 1701340560, "digest": { "alg": "SHA256", "value": "072717d04b7a034e47c4b04a2b5e5920401b8de748e2382e3c22ca03fa1e87e0" }, "purposeId": "243d810b-ee3c-4e4b-bf1a-57d0f0e297d2", "iss": "uat.interop.pagopa.it", "exp": 1701341160, "iat": 1701340560, "client_id": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "jti": "e9e09881-a25b-4f3a-82c2-a15e3882dc8d" }

Calcolol'impronta del file JSON di richiesta e la rappresento in base64 frS285X4CkUCivxXMFPoQhdCn5A8mzIKzJQLy4geo7k=

Compongo il token di integrità: eyJraWQiOiJST3dkdmJjWGlDemJ6dXpLa0xUc2w0RFZEN19mV1pBNTM1d21oZGRSdXI4IiwiYWxnIjoiUlMyNTYiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiIwNGQ5MDhjZi1iODcyLTQxNGMtYjBjMS1hMmJlOThhN2ZmMjEiLCJhdWQiOiJodHRwczovL21vZGlwYS12YWwuYW5wci5pbnRlcm5vLml0L2dvdndheS9yZXN0L2luL01pbkludGVybm9Qb3J0YUFOUFIvQzAwMy1zZXJ2aXppb1ZlcmlmaWNhRGljaEdlbmVyYWxpdGEvdjEiLCJpYXQiOjE3MDEzNDQxNjAsIm5iZiI6MTcwMTM0NDE2MCwiZXhwIjoxNzAxNDA0MTYwLCJpc3MiOiI3ZGU3MGI4NC1lYmU5LTRlYjQtYjQxZi00NWJmN2RmMGE4NzEiLCJzdWIiOiI3ZGU3MGI4NC1lYmU5LTRlYjQtYjQxZi00NWJmN2RmMGE4NzEiLCJzaWduZWRfaGVhZGVycyI6W3siZGlnZXN0IjoiU0hBLTI1Nj1mclMyODVYNENrVUNpdnhYTUZQb1FoZENuNUE4bXpJS3pKUUx5NGdlbzdrPSJ9LHsiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbiJ9XX0.UFb7YXmUVovCQUfduNZbFgeKm5bP0o0zcs6OWXT6TUlFy8Br16gC0H6U9oRPYYSsktYB8U5h-X2Pf16tiJuq3hDS24KqOKKWUAib9w8yb5yaQeSnMJJSjou8x8nrNnsne3mx7E8bIPuNI90vghZ3U5lJAY-hauBYuUALVK7tgnu8RN0zRQa15ZsABifkx28vg3k9zyPfXuEvJQqWuKHp2czD1FfkdM4J9TV3oGhUZ6MVyaJqUxzRGxNlsgKtaMpg5eRpmLTUuq3pR7--b_x19qhMUkJ77RD_Q8ATBIPLsH5J864FaulvwwnIMv1UDl1PMlzmPqFe56KncSIyJatpnA

Corrispondente a: { "jti": "04d908cf-b872-414c-b0c1-a2be98a7ff21", "aud": "https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C003-servizioVerificaDichGeneralita/v1", "iat": 1701344160, "nbf": 1701344160, "exp": 1701404160, "iss": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "sub": "7de70b84-ebe9-4eb4-b41f-45bf7df0a871", "signed_headers": [ { "digest": "SHA-256=frS285X4CkUCivxXMFPoQhdCn5A8mzIKzJQLy4geo7k=" }, { "content-type": "application/json" } ] }

Eseguo la chiamata all'url del servizio con i parametri dell'header, e il json nel body e ottengo un 400

{"type":"https://govway.org/handling-errors/400/InteroperabilityInvalidRequest.html","title":"InteroperabilityInvalidRequest","status":400,"detail":"Received request is not conform to the required interoperability profile","govway_id":"efa9b713-8f65-11ee-827e-005056ae5232"}

TheVise1975 commented 11 months ago

il mio file di ricerca è questo

{ "idOperazioneClient": "1", "criteriRicerca": { "codiceFiscale": "SGGPRM60A01H501A" }, "verifica": { "generalita": { "codiceFiscale": { "codFiscale": "SGGPRM60A01H501A" }, "cognome": "SOGGETTO", "nome": "PRIMO", "sesso": "M", "dataNascita": "1960-01-01+02:00", "luogoNascita": { "comune": { "nomeComune": "ROMA", "codiceIstat": "058091", "siglaProvinciaIstat": "RM" } } } }, "datiRichiesta": { "dataRiferimentoRichiesta": "2023-11-29", "motivoRichiesta": "1", "casoUso": "C003" } }

TheVise1975 commented 11 months ago

L'unica cosa che ho notato di differente sui token, a parte ovviamente il valore di jti e delle date, la presenza della data "nbf" nel token di assertion del client JAVA, Se non lo riporto nella mia chiamata c#, riesco a farmi restituire il voucher da PDND. Se lo inserisco la chiamata mi va in errore (cosi' come se copio il valore della mia assertion nell'interfaccia di debug di PDND mi da un errore: Client assertion validation failure. Reason: JWT before use time)

Se copio il valore dell' assertion creato su JAVA, e lo inserisco sulla maschera di debug di PDND, me la segna valida....

afrontera85 commented 11 months ago

Salve, relativamente al govway_id":"efa9b713-8f65-11ee-827e-005056ae5232" l'errore che ci risulta è questo: Verifica ModI della richiesta fallita: Riscontrate 4 eccezioni. Token non utilizzabile prima della data '2023-11-30_12:36:00.000' Token creato nel futuro (data creazione: '2023-11-30_12:36:00.000') [Header 'Agid-JWT-TrackingEvidence'] Token non utilizzabile prima della data '2023-11-30_12:35:57.000' [Header 'Agid-JWT-TrackingEvidence'] Token creato nel futuro (data creazione: '2023-11-30_12:35:57.000')

TheVise1975 commented 11 months ago

Ok.... direi che qualcosa ho portato a casa...

{"listaSoggetti":{"datiSoggetto":[{"infoSoggettoEnte":[{"chiave":"Verifica generalita'","id":"1002","valore":"S"}]}]},"idOperazioneANPR":"59512789"}

amollicone1982 commented 11 months ago

Direi di si. Ottimo Buona giornata