Risposta ANNCSU Aggiornamento Coordinate

Buongiorno, utilizzando il servizio in oggetto in ambiente collaudo ricevo uno schema di risposta differente da quello citato in documentazione (1.0.0 draft).

Questo lo schema restituito dall’endpoint:
{
“progressivoCivico”: “1370588”,
“idOperazione”: “”,
“dati”: [
{
“progr_civico”: “1370588”,
“numero”: “12”,
“sez_censimento”: “9”,
“data_inizio”: “2025-07-24T10:47:10.698Z”,
“data_ini_valid_amm”: “08/10/2024”,
“progr_nazionale”: “2000449”,
“codcom”: “A062”,
“coordinata_x_comune”: “13.1022001143”,
“coordinata_y_comune”: “41.88476233032955”,
“coordinata_z_comune”: “0”,
“metodo”: “3”
}
],
“id”: “111”
}

da documentazione invece:
{
“idRichiesta”: “5144”,
“esito”: “0”,
“messaggio”: “OK”,
“dati”: [
{
“progr_civico”: “1370588”,
“codice_civico_comunale”: “7569A”,
“numero”: “12”,
“esponente”: “A”,
“specificita”: “ROSSO”,
“metrico”: “300”,
“sez_censimento”: “9”,
“data_inizio”: “2025-07-24T10:47:10.698Z”,
“data_fine”: “2025-07-24T10:47:10.698Z”,
“progr_nazionale”: “2000449”,
“codcom”: “A062”,
“coordinata_x_comune”: “13.1022001143”,
“coordinata_y_comune”: “41.88476233032955”,
“coordinata_z_comune”: “0”,
“metodo”: null,
“data_ini_valid_amm”: “08/10/2024”,
“data_fine_valid_amm”: “08/10/2024”,
“isolato”: “101”
}
]
}

C’è una versione aggiornata del documento che non è presente sul portale PDND?

Buongiorno. Ho visto che ha richiamato l’e-service gi aggiornamento coordinate in ambiente di collaudo. CI sto provando pure io ma mi da sempre 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’: ‘b90662cf-ad8e-11f0-9907-005056ae4a47’.

Nella chiamate gli passo, come da specifiche tecniche, i tre token:
voucher, Agid-JWT-Signature e Agid-JWT-TrackingEvidence ma continua a dare sempre lo stesso messaggio.

Ho seguito le specifiche indicate nel documento Linee Guida sull’interoperabilità tecnica delle Pubbliche Amministrazioni – Pattern di sicurezza seguendo la configurazione per integrity_rest_02 e audit_rest_02.

come payload ho passato questo per la Agid-JWT-Signature
claims = {

   "aud": RIFERIMENTO_ESERVICE,

   "iat": now2,

    "nbf": now2,

    "exp": exp,

    "purposeId": PURPOSE_ID,

    "jti": str(int(datetime.now(timezone.utc).timestamp() \* 1000)),  # identificativo univoco

    "iss": ISSUER,

    "sub": ISSUER,

    "signed_headers": \[

        {"digest": digest_header},

        {"content-type": "application/json"}

    \]       

}

e per Agid-JWT-TrackingEvidence questo
claimsTracking = {

    "iss": ISSUER,

    "aud": RIFERIMENTO_ESERVICE,

    "purposeId": PURPOSE_ID,

    "dnonce": 1234567890123,

    "userID": USER_ID,

    "userLocation": USER_LOCATION,

    "iat": now,

    "exp": exp,

     "jti": str(jti),

     "LoA":LOA

}

l’header uguali per entrambi

headers_rsa = {

"kid": KID,

"alg": ALG,

"typ": TYP

}

e nella chiamata relativa al servizio questo:
headers = {

    "Accept": "application/json",

    "Content-Type": type_header,

    "Content-Encoding": encoding,

    "Authorization": "Bearer " + voucher,

    "Agid-JWT-Signature": jwt_signature,

    "Agid-JWT-TrackingEvidence": jwt_tracking,

    "Digest": digest_header

}.

E la request di aggiornamento come l’hai formulata? Hai lo schema?

Grazie per avermi risposto così celermente.

Per la request ho usato quella indicata nelle specifiche techiche contenute in Specifica API.yml:

request_body = {

"richiesta": {

    "accesso": {

        "codcom": "A062",

        "progr_civico": "1370588",

        "coordinate": {

            "x": "13.1022000",

            "y": "41.8847600",

            "z": "150",

            "metodo": "3"

        }

    }

}

}

ho però saltato il controllo sui certificati

response = requests.post(API_URL, data=request_body, headers=headers, verify=False)

come API_URL = “https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1/gestionecoordinate

Buongiorno,
anche noi abbiamo provato a utilizzare le API per la modifica delle coordinate, al seguente endpoint:
https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-accessi/v1/gestionecoordinate.

Dopo l’autenticazione (che sembra essere andata a buon fine), riceviamo tuttavia il seguente errore:“https://govway.org/handling-errors/404/UndefinedOperation.html”,
“title”: “UndefinedOperation”,
“status”: 404,
“detail”: “Operation undefined in the API specification”,
“govway_id”: “baa00082-afd8-11f0-a66a-005056ae0307”

Qualcuno ha riscontrato lo stesso problema o sa indicarmi come risolverlo?
Grazie in anticipo per qualsiasi suggerimento!

Che payload invii all’endpoint?

la chiamata la facciamo così:

curl -vk -X POST “https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-accessi/v1/gestionecoordinate”
-H “Content-Type: application/json”
-H “Authorization: Bearer <ACCESS_TOKEN>”
-H “Agid-JWT-Signature: <JWT_SIGNATURE>”
-H “Agid-JWT-TrackingEvidence: <JWT_TRACKING>”
-d ‘{“richiesta”:{“accesso”:{“codcom”:“D364”,“progr_civico”:“16025316”,“coordinate”:{“x”:“15.901662189353893”,“y”:“38.64623175100239”,“z”:“447”,“metodo”:“3”}}}}’

Ciao Paola, da quel che noto confrontando con la mia soluzione, tra gli headers mancherebbe il digest e il “Content-Encoding” di tipo “UTF-8”. Inoltre, la coordinata x e y ha lunghezza di 17 caratteri, mentre in documentazione (v1) riporta lunghezza massima di 12 caratteri.
Saluti

Buongiorno.

Se può essere d’aiuto metto il codice Python.
Ometto la parte di calcolo del voucher

le URL per la POST e l’Aud per le Agid-JWT
API_URL = “https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1/gestionecoordinate

RIFERIMENTO_ESERVICE=“https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1

calcolo JWT_Signature

json_body = json.dumps(request_body, separators=(‘,’, ‘:’)) # ← importante!

body_bytes = json_body.encode(‘utf-8’)

digest_hash = hashlib.sha256(body_bytes).digest()

digest_base64 = base64.b64encode(digest_hash).decode()

digest_header = f"SHA-256={digest_base64}"

claims = {

   "aud": RIFERIMENTO_ESERVICE,

   "iat": now2,

    "exp": exp,

    "purposeId": PURPOSE_ID,

    "jti": str(int(datetime.now(timezone.utc).timestamp() \* 1000)),  # identificativo univoco

    "iss": ISSUER,

    "sub": ISSUER,

    "signed_headers": \[

        {"digest": digest_header},

        {"content-type": "application/json"}

    \]       

}

headers_rsa = {

    "alg": "RS256",

    "typ": "JWT",

    "kid": KID        

}

jwt_signature = jwt.encode(claims, rsa_key, algorithm=“RS256”, headers=headers_rsa)

calcolo JWT_TrackingEvidence
claimsTracking = {

    "iss": ISSUER,

    "aud": RIFERIMENTO_ESERVICE,

    "purposeId": PURPOSE_ID,

    "dnonce": 1234567890123,

    "userID": USER_ID,

    "userLocation": USER_LOCATION,

    "iat": now,

    "exp": exp,

     "jti": str(jti),

     "LoA":LOA

}

jwt_tracking = jwt.encode(claimsTracking, rsa_key, algorithm=“RS256”, headers=headers_rsa)

POST

headers = {

    "Accept": "application/json",

    "Content-Type": type_header,

    "Content-Encoding": encoding,

    "Authorization": "Bearer " + voucher,

    "Agid-JWT-Signature": jwt_signature,

    "Agid-JWT-TrackingEvidence": jwt_tracking,

    "Digest": digest_header

}

response = requests.post(API_URL, data=body_bytes, headers=headers, verify=False)

notare che la request deve essere passata in byte.

Spero di essere stato utile

Grazie a entrambi. Le vostre risposte sono state utilissime!

Buonasera,
sto cercando di implementare la chiamata
https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1/gestionecoordinate

ma continuo ad ottenere 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": "e557ae4f-b405-11f0-9626-005056ae0307"

}

Il Bearer Token del fruitore è valido, quindi è probabile che l’errore sia nei token AGID

li pubblico sotto per esteso:

Agid-JWT-Signature
{
“alg”: “RS256”,
“kid”: “kid client”,
“typ”: “JWT”,
“x5c”: [“MIIEIzCCAwugAwIBA….]
}

{
“aud”: “https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1”,
“iat”: 1761659852,
“exp”: 1761663452,
“purposeId”: “purposeId”,
“jti”: “1761659852055”,
“iss”: “clientid”,
“sub”: “clientid”,
“signed_headers”: [
{
“digest”: “SHA-256=rJgcv4ppqjwBZIYRZt0DUMdsbaPhpIVDnmQO6P9ssx8=”
},
{
“content-type”: “application/json;charset=utf-8”
}
]
}

Agid-JWT-TrackingEvidence
{
“alg”: “RS256”,
“kid”: “kid client”,
“typ”: “JWT”,
“x5c”: [“MIIEIzCCA…]
}
{
“iss”: “iss”,
“aud”: “https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1”,
“purposeId”: “purposeId”,
“dnonce”: 1761659852089,
“userID”: “mio cf”,
“userLocation”: “c_m….”,
“iat”: 1761659852,
“exp”: 1761663452,
“jti”: “eb03bf5…”,
“LoA”: “L2”
}

questa la chiamata

curl --location ‘https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1/gestionecoordinate’ \

--header ‘Accept: application/json’ \

--header ‘Content-Type: application/json;charset=utf-8’ \

--header ‘Content-Encoding: identity’ \

--header ‘Authorization: Bearer eyJhbGci…’ \

--header ‘Agid-JWT-Signature: eyJhbGci…’ \

--header ‘Agid-JWT-TrackingEvidence: eyJhb….’ \

--header ‘Digest: SHA-256=rJgcv4ppqjwBZIYRZt0DUMdsbaPhpIVDnmQO6P9ssx8=’ \

--data '{

"richiesta": {

    "accesso": {

        "codcom": "D364",

        "progr_civico": "16025316",

        "coordinate": {

            "x": "15.901662189353",

            "y": "38.646231751002",

            "z": "447",

            "metodo": "3"

        }

    }

}

}’

dove sbaglio?
Grazie fin da ora a chi vorrà rispondere.

Non so se può essere il ‘Content-Encoding’ nella chiamata, io ho usato ‘UTF-8’. Inoltre, per quanto riguarda il LoA, il formato corretto mi pare sia tra “SpidL1” / “SpidL2” / “SpidL3” (tuttavia non penso sia validato)

Buongiorno Michele, grazie innanzi tutto per la risposta.
Per completezza riporto le prove fatte:

  1. ho provato a modifiare il content encoding ma non cambia nulla,
  2. stessa cosa per il LoA, ottengo sempre lo stesso errore.

Alla fine ho scoperto che il problema era nel digest che differiva tra quello in firma e quello esplicito nell’header rispetto al body.
Ora funziona!

Ottimo, @SimoneGabellieri!
Colgo l’occasione per correggere un mio errore riguardo il valore da inserire nell’header ‘Content-Encoding’. Quello che avevi inserito era di fatto corretto. Consultando la documentazione ho notato che nell’esempio viene indicato ‘identity’ come “Content-Encoding”, il che corrisponde ad una non-compressione.

Grazie per lo spunto di riflessione!

Buongiormo a tutti e grazie per i preziosi contributi,

mi ricollego al post di Paola_Bruno in quanto utilizzando le API per la modifica delle coordinate otteniamo un errore con status 404 ma con descrizione diversa:

{

    "type": " https://govway.org/handling-errors/404/NotFound.html ",

    "title": "NotFound",

    "status": 404,

    "detail": "Unknown API Request",

    "X-Global-Transaction-ID": "6026e6bc690db11c8224651f"

}

Abbiamo verificato attentamente i parametri di fruizione e i pattern MODI applicati, da tenere in considerazione che le metodologie e i pattern utilizzati sono gli stessi che applichiamo per accesso ad ANPR.

Qualche suggerimento su come è stato risolto il problema?
Allego i contenuti della chiamata effettuata:

Url di collaudo utilizzata VERB = post:
https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1/gestionecoordinate

Audience utilizzata:
"aud": "https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1",

Un estratto del tracking evidnce token:
 "dnonce": "1234567890123",
  "userID": "<logname>@<tenant>",
  "userLocation": "<srv><inst><licen>",
  "LoA": "LOA3"


La chiamata generata da POSTMAN

url --location 'https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1/gestionecoordinate' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Agid-Jwt-Signature: eyJraWQ............' \
--header 'Digest: SHA-256=pQ9ALm4zY3X............' \
--header 'Agid-Jwt-TrackingEvidence: eyJraWQiOiJ4QWZ6S2F.........' \
--header 'Content-Encoding: UTF-8' \
--header 'Authorization: ••••••' \
--data '{
  "richiesta": {
    "accesso": {
      "codcom": "A062",
      "progr_civico": "1370588",
      "coordinate": {
        "x": "13.1022000",
        "y": "41.8847600",
        "z": "150",
        "metodo": "3"
      }
    }
  }
}'
La Risposta (status code 404 not found)
{
    "type": "https://govway.org/handling-errors/404/NotFound.html",
    "title": "NotFound",
    "status": 404,
    "detail": "Unknown API Request",
    "X-Global-Transaction-ID": "6026e6bc690db11c8224651f"
}

Grazie, qualsiasi suggerimento è prezioso!

Di solito il problema di “Unknown API Request” è riferita all’url, ti riporto quella che ho utilizzato:
https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate-PDND/anncsu-aggiornamento-coordinate/v1/gestionecoordinate

Inoltre, noto che utilizzi una url riferita all’eservice “ANNCSU - Aggiornamento accessi” (anche in questo caso sarebbe errata) ma dal payload deduco che sta provando a chiamare l’eservice “ANNCSU - Aggiornamento coordinate”, corretto?

1 Mi Piace

Buonasera,
non so se può essere utile ma ho notato che spesso da quell’errore anche quando il Bearer Token è scaduto.
Teoricamente l’errore di token scaduto dovrebbe entrare nella verifica dell’autenticazione (quindi errore 401) ma puntualmente quanto scade il token mi da esattamente l’errore segnalato.
Ovviamente il sospettato principale resta l’URL, come indicato giustamente da @Michele_P

Un saluto

Grazie per la veloce risposta,

la url che utilizzo è proveniente dalle specifiche yaml del servizio ANNCSU - Aggiornamento coordinate accessi.

Yaml di ANNCSU - Aggiornamento coordinate accessi:

openapi: "3.0.3"
info: 
  title: ANNCSU REST API - COORDINATE - ACCESSI
  description: |-
    API dei servizi REST di ANNCSU su PDND per aggiornamento delle coordinate degli accessi
    Pattern Model applicati:
    - [AUDIT_REST_02 ] Inoltro dati tracciati nel dominio del Fruitore REST con correlazione
    - [BLOCK_REST] Blocking REST
    - [INTEGRITY_REST_02] Integrità del payload messaggio REST in PDND
  termsOfService: "https://govway.org/documentazione/api/index.html"
  contact:
    email: "infopdnd_anncsu@sogei.it"
  version: "1.0.0 draft"
  x-api-id: "https://govway.org/apiConfig"
  x-summary: "Servizi per la configurazione di GovWay"
servers:
  - url: https://modipa.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1
    description: "l'accesso all'API e' protetta dai controlli di accesso su GovWay"
  - url: https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1
    description: "l'accesso alle API di validazione e' protetta dai controlli di accesso su GovWay"
tags:
  - name: anncsu
    description: Servizi ANNCSU su PDND
  - name: status
security:
  - bearerAuth: []
    Agid-JWT-Signature: []
    Agid-JWT-TrackingEvidence: []
paths:
  /gestionecoordinate:
    post:

Yaml di ANNCSU - Aggiornamento accessi:

openapi: "3.0.3"
info: 
  title: ANNCSU REST API - ACCESSI
  description: |-
    API dei servizi REST di ANNCSU su PDND per aggiornamento accessi
    Pattern Model applicati:
    - [AUDIT_REST_02 ] Inoltro dati tracciati nel dominio del Fruitore REST con correlazione
    - [BLOCK_REST] Blocking REST
    - [INTEGRITY_REST_02] Integrità del payload messaggio REST in PDND
  termsOfService: "https://govway.org/documentazione/api/index.html"
  contact:
    email: "infopdnd_anncsu@sogei.it"
  version: "1.0.0 draft"
  x-api-id: "https://govway.org/apiConfig"
  x-summary: "Servizi per la configurazione di GovWay"
servers:
  - url: https://modipa.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1
    description: "l'accesso all'API e' protetta dai controlli di accesso su GovWay"
  - url: https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1
    description: "l'accesso all'API di validazione e' protetta dai controlli di accesso su GovWay"
tags:
  - name: anncsu
    description: Servizi ANNCSU su PDND
  - name: status
security:
  - bearerAuth: []
    Agid-JWT-Signature: []
    Agid-JWT-TrackingEvidence: []
paths:
  /accessi:

Possiamo notare che url di End-Point è identica, ma il metodo indicato in paths è diverso,

la claim di aud differisce oltre al metodo.

Applicando la url coe mi hai suggerito ottengo:

{
    "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": "35382ecf-bbe3-11f0-bda9-005056ae0307"
}

Sembrerebbe che la chiamata sia malformata. Ma questo non semplifica le cose.

Grazie per l’attenzione continuiamo le nostre prove.

Saluti

Questo era l’errore che avevo anche io.
Potrebbe essere un problema di token con dati errati (al 99% i token AGID) oppure il digest che non corrisponde con il body.

Buongiorno, mi accodo anche io con il medesimo errore, non capisco dove sbaglio.

Chiedo un cortese aiuto.

URL: https://modipa-val.agenziaentrate.it/govway/rest/in/AgenziaEntrate/anncsuaccessi/v1/gestionecoordinate
ERRORE HTTP
StatusCode: NotFound
Messaggio: Response status code does not indicate success: 404 (Not Found).
Payload inviato:
{
“richiesta”: {
“accesso”: {
“progr_civico”: “1370588”,
“codcom”: “A062”,
“coordinate”: {
“x”: “13.1022000”,
“z”: “150”,
“metodo”: “3”,
“y”: “41.8847600”
}
}
}
}

e questo è il try che provo a lanciare:

try {
$Response = Invoke-WebRequest -Uri $Url -Method POST
-Headers @{
“Authorization” = “Bearer $BearerToken”
“Agid-JWT-TrackingEvidence” = $TrackingJWS
“Agid-JWT-Signature” = $SignatureJWS
“Content-Type” = “application/json”
} -Body $Payload
-SkipCertificateCheck
-ErrorAction Stop

 

$TxId = $Response.Headers["X-Global-Transaction-ID"]

Grazie mille a chi saprà aiutarmi.