italia / anpr

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

Esistenza Vita [C019] - Received request is not conform to the required interoperability profile #4496

Closed JeyjooMilano closed 3 weeks ago

JeyjooMilano commented 3 months ago

Buongiorno,

Devo fare l'accertamento dell'esistenza vita [C019]. Abbiamo generato il voucher con successo. Faccendo una chiamata all'endpoint: https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002 riceviamo la risposta seguente:

{ "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": "b8c535f2-fd7f-11ee-b214-005056ae5232" }

Ci potete indicare il problema?

Grazie

afrontera85 commented 3 months ago

L'errore è questo: Validazione security token ModI 'INTEGRITY' della richiesta fallita: Signature verification failed Ho visto che è sbagliato l'aud, deve essere questo: https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR/C019-servizioAccertamentoEsistenzaVita/v1

JeyjooMilano commented 3 months ago

Grazie. Abbiamo modificato aud.

Ecco la request che faccio:

curl --location 'https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002' \ --header 'kid: TAw4jWvuG3iR37BQDe794qUBcv6Zykp6N2GeaWvujnw' \ --header 'clientId: 29dfb02f-1c17-4691-a2b2-43414750d722' \ --header 'purposeId: 2dafb21f-0a20-4783-8814-98d43d362cf9' \ --header 'Agid-JWT-TrackingEvidence: eyJhbGciOiJSUzI1NiIsImtpZCI6IlRBdzRqV3Z1RzNpUjM3QlFEZTc5NHFVQmN2Nlp5a3A2TjJHZWFXdnVqbnciLCJ0eXAiOiJKV1QifQ.ewogICJpc3MiOiAiMjlkZmIwMmYtMWMxNy00NjkxLWEyYjItNDM0MTQ3NTBkNzIyIiwKICAic3ViIjogIjI5ZGZiMDJmLTFjMTctNDY5MS1hMmIyLTQzNDE0NzUwZDcyMiIsCiAgImF1ZCI6ICJodHRwczovL21vZGlwYS12YWwuYW5wci5pbnRlcm5vLml0L2dvdndheS9yZXN0L2luL01pbkludGVybm9Qb3J0YUFOUFIvQzAxOS1zZXJ2aXppb0FjY2VydGFtZW50b0VzaXN0ZW56YVZpdGEvdjEiLAogICJwdXJwb3NlSWQiOiAiMmRhZmIyMWYtMGEyMC00NzgzLTg4MTQtOThkNDNkMzYyY2Y5IiwKICAianRpIjogIjhiNDQ2ODY4LThmMTUtNGY0OS04ZmMyLWIwNDc1N2YyNjdiNCIsCiAgImlhdCI6IDE3MTM0NDkzMzEuMCwKICAiZXhwIjogMTcxNDA0OTMzMS4wLAogICJuYmYiOiAxNzEzNDQ5MzMxLjAsCiAgImRub25jZSI6ICIxMjM0NTY3ODkwMTIzIiwKICAidXNlcklEIjogIlVzZXIxMjMiLAogICJ1c2VyTG9jYXRpb24iOiAiMjYuMi4xMi4yMyIsCiAgIkxvQSI6ICJMT0EzIgp9.GhJHPfcjVErTc73SLtYzfMqElxciZLSIFRzGKuf24gr7a2D3UCaW-bV9zH2mg-7bxEro0fuFDuZF95PSssLN5f56GOT11x7wgiByW19l6Fmd2JWH64xXV9sj1WKrlHVfcdi3Gz4qKdPFpFnCqziXw4ByDnopd-WoUP5RRnpQCYDhfe2ma3pzmKt64bldoChe-jgX1dbnJKJvlWMfjZb4CnD5dew_9jvpDuYXXvonLbyHQ073fyLjiF9OzHTrx7jd1x_Rd52lFTjC9uVmKiML5Fx1gZbEUdOd5lKdnH99WEzs0OjsaZeJdnWSm6yjPdJVYmes5RdxgaXgz9Gr1figGg' \ --header 'Agid-JWT-Signature: eyJhbGciOiJSUzI1NiIsImtpZCI6IlRBdzRqV3Z1RzNpUjM3QlFEZTc5NHFVQmN2Nlp5a3A2TjJHZWFXdnVqbnciLCJ0eXAiOiJKV1QifQ.ewogICJpc3MiOiAiMjlkZmIwMmYtMWMxNy00NjkxLWEyYjItNDM0MTQ3NTBkNzIyIiwKICAic3ViIjogIjI5ZGZiMDJmLTFjMTctNDY5MS1hMmIyLTQzNDE0NzUwZDcyMiIsCiAgImF1ZCI6ICJodHRwczovL21vZGlwYS12YWwuYW5wci5pbnRlcm5vLml0L2dvdndheS9yZXN0L2luL01pbkludGVybm9Qb3J0YUFOUFIvQzAxOS1zZXJ2aXppb0FjY2VydGFtZW50b0VzaXN0ZW56YVZpdGEvdjEiLAogICJwdXJwb3NlSWQiOiAiMmRhZmIyMWYtMGEyMC00NzgzLTg4MTQtOThkNDNkMzYyY2Y5IiwKICAianRpIjogIjVjYTFjOGEwLTBmNzctNGRkYS1iNDk0LTUxYzQzOGU0ZGZhNyIsCiAgImlhdCI6IDE3MTM0NDkzMzIuMCwKICAiZXhwIjogMTcxNDA0OTMzMi4wLAogICJuYmYiOiAxNzEzNDQ5MzMyLjAsCiAgInNpZ25lZF9oZWFkZXJzIjogWwogICAgewogICAgICAiZGlnZXN0IjogIlNIQS0yNTY9T0FnWXRmanNwNWtnNElJTkw0YnRqK1dQdnNJbzU4NVc2WFRra1c4SmU3OD0iCiAgICB9LAogICAgewogICAgICAiY29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICB9CiAgXQp9.d0ly3aUWiM3xmyrbYfrB2V9QzNuOdx6eqztPpT4BQQJTy8kcxWdD2wQ8mZ234Ynskmk2qIK6Rhi31HMkL8fAbojrxMxEeqmwBKVs1QS8mRibapzvZWKDbaEVRl51ACca3ZyQTS-JyZ8hzu87FjFslqXsZcifNbxZO8UOMt38PdeqSy7zShZg5x7PgLrDyjfSc3FkJEVD0ZPeKh4ZbZCpC3E5kBFnVJOLFVF1K5RFPp5yBL7UN81rfbl0fEuie8cXDs6vj5a2XofRt82Lp9X2Nlbeg9McfWGuLQu5UZmpQkv74NhMWnSJk1Bb5bx4B1OkhltaQ1Mnv-XryE1KKshHmg' \ --header 'alg: RS256' \ --header 'typ: JWT' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer eyJ0eXAiOiJhdCtqd3QiLCJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsImtpZCI6IjMyZDhhMzIxLTE1NjgtNDRmNS05NTU4LWE5MDcyZjUxOWQyZCJ9.eyJhdWQiOiJodHRwczovL21vZGlwYS12YWwuYW5wci5pbnRlcm5vLml0L2dvdndheS9yZXN0L2luL01pbkludGVybm9Qb3J0YUFOUFIvQzAxOS1zZXJ2aXppb0FjY2VydGFtZW50b0VzaXN0ZW56YVZpdGEvdjEiLCJzdWIiOiIyOWRmYjAyZi0xYzE3LTQ2OTEtYTJiMi00MzQxNDc1MGQ3MjIiLCJuYmYiOjE3MTM0NDkzOTMsInB1cnBvc2VJZCI6IjJkYWZiMjFmLTBhMjAtNDc4My04ODE0LTk4ZDQzZDM2MmNmOSIsImlzcyI6InVhdC5pbnRlcm9wLnBhZ29wYS5pdCIsImV4cCI6MTcxMzQ0OTk5MywiaWF0IjoxNzEzNDQ5MzkzLCJjbGllbnRfaWQiOiIyOWRmYjAyZi0xYzE3LTQ2OTEtYTJiMi00MzQxNDc1MGQ3MjIiLCJqdGkiOiIxNmVmNTMyMy1mMjJhLTQ4NmYtOGYwMi01NTljZWJjYzlhMzEifQ.eeTomH3p8yxhNg9ylM3jlS_6_xXP6TLl9jqdUGG2Y4bR87mIH8LXJNsqc0WhU9LhR6xYbMqKVxykbEfhlDD-VTprwqj4GLOj6IBHZqetyE85qYU2iGj9RlJTDgW62IZGZwMTT28pX1BGdfuUiOdHWhbU_cRNIM2kkzUDbjs92zgzHikLoU2g_kq8O5HTeFeS3XwZ1qLRnAawtpSpx8wHBQO971q2QnChMwK9NKGA0SAtdd2W_XFgv_VKoDnOlZOnJNFTSzmYWv3yt7G7A8jj8yzY4ixaPtqRWqtfFZ5oogu6TRPEcli12vKqz4Pt7rmT8Wb00ceRw_bqZT667PL0hw' \ --data '{ "idOperazioneClient": "1", "criteriRicerca": { "codiceFiscale": "STTSGT90A01H501J" }, "datiRichiesta": { "dataRiferimentoRichiesta": "2024-04-16", "motivoRichiesta": "esistenza in vita", "casoUso": "C019" } } '

Ecco la risposta:

{ "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": "920c0e6a-fd87-11ee-b214-005056ae5232" }

afrontera85 commented 3 months ago

L'errore è ancora Validazione security token ModI 'INTEGRITY' della richiesta fallita: Signature verification failed. L'errore 400 è relativo all'implementazione della cornice di sicurezza, dovete verificare di rispettare l'implementazione dell' INTEGRITY_REST_02. Nell'header HTTP non passate il digest ad esempio...

JeyjooMilano commented 2 months ago

Buongiorno. Abbiamo aggiunto il digest all'header. Ora riceviamo questa risposta:

{ "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": "ac9de692-fe1d-11ee-8562-005056ae5232" }

Grazie

afrontera85 commented 2 months ago

Stesso errore... Decodificando l'Authorization Bearer ho visto che non c'è il pezzo:

{ "digest": { "alg": "SHA256", "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" } }

Dove value è il valore ottenuto applicando l'algoritmo indicato nel claim digest.alg al JWT di audit. AUDIT_REST_02 pretende che quando si richiede il token a pdnd venga inserita nella client assertion l'hash del token Agid-JWT-TrackingEvidence Non avendo inserito nella client assertion pdnd quanto sopra, la pdnd non inserisce l'hash nel voucher generato

JeyjooMilano commented 2 months ago

Ho aggiornato lo script create_client_assertion.py inserendo "digest" (come sopra) e client_ID - come specificato da AUDIT_REST_02. Ma il voucher non si genera più è da questo errore:

{"correlationId":"37f45c6f-c1d1-4f48-8cd9-b76ca681c48f","errors":[{"code":"015-0008","detail":"Unable to generate a token for the given request"}],"status":400,"title":"The request contains bad syntax or cannot be fulfilled.","type":"about:blank"}

afrontera85 commented 2 months ago

Si tratta di un errore restituito da PDND, quindi è necessario chiedere all'assistenza pdnd, loro possono darvi maggiori delucidazioni sull'errore relativo al correlationId indicato.... Di solito potrebbe essere dovuto ad un clientid o purposeid errato

JeyjooMilano commented 2 months ago

OK - dove posso mandare la richiesta di sopporto per PDND? Grazie

JeyjooMilano commented 2 months ago

Buongiorno,

Abbiamo provato ad inserire il digest ma da sempre errore quando facciamo validazione del Voucher. Ho provato questi 3 payload sotto. In ogni caso mi da l'errore riportato sotto. Nota, nel file create_client_assertion.py dal vostro sito, abbiamo cambiato soltanto la parte digest. Se tolgo digest, il voucher si genera senza problemi.

Payload 1

{
    "iss": args.issuer,
    "sub": args.subject,
    "aud": args.audience,
    "purposeId": args.purposeId,
    "client_id": "XXXX",
    "jti": str(jti),
    "iat": issued,
    "exp": expire_in,
    "digest": {
      "alg": "SHA256",
      "value": "OAgYtfjsp5kg4IINL4btj+WPvsIo585W6XTkkW8Je78="
    }
  }

risposta: {"correlationId":"b02a8505-d1c0-4afb-a28f-2760ad06c47f","errors":[{"code":"015-0008","detail":"Unable to generate a token for the given request"}],"status":400,"title":"The request contains bad syntax or cannot be fulfilled.","type":"about:blank"}

Payload 2

{
    "iss": args.issuer,
    "sub": args.subject,
    "aud": args.audience,
    "purposeId": args.purposeId,
    "client_id": "XXXX",
    "jti": str(jti),
    "iat": issued,
    "exp": expire_in,
    "digest": "SHA-256=OAgYtfjsp5kg4IINL4btj+WPvsIo585W6XTkkW8Je78="
}

Risposta: {"correlationId":"8106272f-6563-4414-a096-851ea748c6dd","errors":[{"code":"015-0008","detail":"Unable to generate a token for the given request"}],"status":400,"title":"The request contains bad syntax or cannot be fulfilled.","type":"about:blank"} Payload 3

{
"iss": args.issuer,
"sub": args.subject,
"aud": args.audience,
"purposeId": args.purposeId,
"client_id": "XXXX",
"jti": str(jti),
"iat": issued,
"exp": expire_in,
"digest": "OAgYtfjsp5kg4IINL4btj+WPvsIo585W6XTkkW8Je78="
}

Risposta {"correlationId":"4c27ca23-dfaa-40b0-991a-cff1b39e7f7b","errors":[{"code":"015-0008","detail":"Unable to generate a token for the given request"}],"status":400,"title":"The request contains bad syntax or cannot be fulfilled.","type":"about:blank"} Come andrebbe inserito digest nel payload?

Grazie ancora

JeyjooMilano commented 2 months ago

Ok, abbiamo risolto il digest e generato un voucher valido.

Faccendo una chiamata all'endpoint: https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002 riceviamo la risposta seguente:


{
    "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": "6bb32e9b-093b-11ef-9f53-005056ae5232"
}

Ci potete indicare il problema?

Grazie

gmiscia commented 2 months ago

@ JeyjooMilano : buongiorno, sto anche io sviluppando un client (in php) per la società dove lavoro. Anche io sono fermo sullo stesso punto in cui è arrivato lei, forse potrebbe essere utile confrontarci su come abbiamo creato il digest e sugli headers da mettere nel curl. Leggendo altri thread ho appurato che PDND l'unica cosa che testa è la lunghezza del digest inserito (oltre ovviamente alla correttezza formale del claim in json). Se la lunghezza è rispettata (64 chars) tutto ok per PDND. Il digest sappiamo che si ottiene con una funzione di hash sha256 a partire da jwt "traking evidence": il primo dubbio è se debba essere passato come argomento della funzione di hash l'intero JWT tracking evidence ossia : " base64(json_header).base64(json_payload).base64(json_signature) " o solo la terza parte base64(json_signature), il secondo è se l'hash debba uscire in formato binary e poi il risultato trasformato in base64. Per quanto riguarda gli headers della chiamata rest io passo i 3 JWT (tracking, signature e bearer ottenuto da PDND) più un "Digest: SHA-256=" miodigest . Non passo come sembrerebbe dai suoi commenti sopra il kid , il clientid la purposeid etc, anche perchè già contenuti dei token che l'erogatore decodifica con la chiave pubblica richiamando api in PDND non appena riceve la nostra richiesta. Sono disponibile ad un confronto comunque se le va.

JeyjooMilano commented 2 months ago

@gmiscia per me sono 3 mesi che faccio domande sui 2 forum PDND di Github. Purtroppo l'API del PDND è contorta. La documentazione è incompleta e in vari punti sbagliata. Ogni volta che si risolve una parte, c'è qualcos' altro che non va o che devi aggiungere.

Dovrebbero essere un integrazione di qualche ora invece ho dovuto arrendermi.

afrontera85 commented 2 months ago

Ok, abbiamo risolto il digest e generato un voucher valido.

Faccendo una chiamata all'endpoint: https://modipa-val.anpr.interno.it/govway/rest/in/MinInternoPortaANPR-PDND/C019-servizioAccertamentoEsistenzaVita/v1/anpr-service-e002 riceviamo la risposta seguente:


{
    "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": "6bb32e9b-093b-11ef-9f53-005056ae5232"
}

Ci potete indicare il problema?

Grazie

L'errore è il seguente: Validazione security token ModI 'INTEGRITY' della richiesta fallita: Signature verification failed: [COMPACT] Signature verification failure: Process 'kid' error: Retrieve remote key 'TAw4jWvuG3iR37BQDe794qUBcv6Zykp6N2GeaWvujnw' failed: Retrieve external resource 'https://govway-anpr-val.sogei.it:8446/govway/rest/out/MinInternoPortaANPR/PDND/api-pdnd/v1/keys/TAw4jWvuG3iR37BQDe794qUBcv6Zykp6N2GeaWvujnw' failed: (http code: 404): {"correlationId":"6f0309d9-ccfc-4dac-b86d-14a4d30d25eb","errors":[{"code":"013-0031","detail":"Key with kId TAw4jWvuG3iR37BQDe794qUBcv6Zykp6N2GeaWvujnw not found"}],"status":404,"title":"The requested resource could not be found but may be available again in the future.","type":"about:blank"}