DevPortalPagoPA



Tabella dei contenuti

Verifichiamo la correttezza dell'Identificativo utente

L'e-service “Demo - Identificativo utente” pubblicato sul catalogo offre un servizio mediante il quale è possibile verificare la presenza e la correttezza di un determinato id legato a un soggetto.

Il caso d'uso

L'e-service in oggetto mi permette infatti di effettuare questa verifica grazie all'invocazione della seguente API:
1POST /subject-id-verification/check
2

Data preparation

La prima cosa da fare, come abbiamo visto, è la configurazione dei dati. Procediamo dunque alla fase di Data Preparation.
Scambio certificati
L'e-service che desideriamo invocare prevede un ulteriore livello di sicurezza per il quale è prevista una fase di handshake.
Questa fase prevede, in altre parole, lo scambio di un certificato tra fruitore ed erogatore ed è permessa dalla seguente API
1POST /subject-id-verification/data-preparation/handshake 
2

Header:

1Authorization: Bearer {{bearerToken}} apikey: {{apikey}}
2

Payload:

1multipart/form-data
2form: 'certificate=@"/myLocation/cert.pem"'
3

Response:

1{ 
2  "message": "string" 
3}
4

Status codes:

  • 200 - Certificato salvato con successo
  • 400 - Errore formato dati input
Di seguito alcune informazioni sulla creazione del certificato.

Come generare il certificato

Il primo passo da fare è quello di generare un certificato client.
Per farlo puoi utilizzare il tool OpenSSL. Lanciamo il comando per la generazione della chiave privata che nel nostro esempio è a 2048 bit:
1openssl genrsa -out private-key.pem 2048
2
a questo punto possiamo procedere alla creazione del certificato, contenente al suo interno la chiave pubblica (della durata di 365 giorni nell'esempio):
1openssl req -new -x509 -key private-key.pem -out cert.pem -days 365
2
Il certificato è pronto per essere condiviso con l'erogatore nella fase di handshake e successive chiamate.

Inserimento dati

Supponiamo di avere la seguente base dati all'interno della nostra applicazione:
IDNomeCognomeDate fine validità
RSSMRA80A01H501UMarioRossiNULL
LGUBCH80A01H501BLuigiBianchiNULL
In accordo a questa effettuiamo la data preparation simulando il seguente scenario:
  • L'id RSSMRA80A01H501U è un soggetto ancora valido
  • L'id LGUBCH80A01H501B è un soggetto obsoleto e che quindi deve essere rimosso dalla nostra base dati
Replichiamo la configurazione desiderata nel seguente modo:
1POST /subject-id-verification/data-preparation
2

Header:

1Content-Type: application/json
2Content-Encoding: identity
3Authorization: Bearer {{bearerToken}}
4x-correlation-id: {{myUniqueCorrelationId}}
5apikey: {{apikey}}
6

Payload:

1{ 
2  "idSubject": "RSSMRA80A01H501U"
3}
4

Response:

Status codes:

  • 200 - Configurazione salvata con successo
1{
2  "message": "string"
3}
4
  • 400 - Errore formato dati input
{ "detail": "Request took too long to complete.", "instance": "string", "status": 503, "title": "string", "type": "about:blank" }

Ottenimento dei dati

Con questa chiamata è possibile ottenere la lista delle organizzazioni presenti all'interno della base dati.
1GET /subject-id-verification/data-preparation
2

Header:

1Content-Type: application/json
2Content-Encoding: identity
3Authorization: Bearer {{bearerToken}}
4x-correlation-id: {{myUniqueCorrelationId}}
5apikey: {{apikey}}
6

Response:

Status codes:

  • 200 - Operazione eseguita con successo
1[
2  {
3    "idSubject": "RSSMRA80A01H501U"
4  }
5]
6
  • 400 - Errore formato dati input
1{
2  "detail": "Request took too long to complete.",
3  "instance": "string",
4  "status": 503,
5  "title": "string",
6  "type": "about:blank"
7}
8

Eliminazione dei dati

Con questo end-point è possibile eliminare una specifica organizzazione tramite il suo id dalla base dati.
1POST /subject-id-verification/data-preparation/remove
2

Header:

1Content-Type: application/json
2Content-Encoding: identity
3Authorization: Bearer {{bearerToken}}
4x-correlation-id: {{myUniqueCorrelationId}}
5apikey: {{apikey}}
6

Payload:

1{ 
2  "idSubject": "RSSMRA80A01H501U" 
3}
4

Response:

Status codes:

  • 200 - Operazione eseguita con successo
1[
2  {
3    "message": "string"
4  }
5]
6
  • 400 - Errore formato dati input
1{
2  "detail": "Request took too long to complete.",
3  "instance": "string",
4  "status": 503,
5  "title": "string",
6  "type": "about:blank"
7}
8
Procediamo a questo punto all'invocazione delle API messe a disposizione dell'e-service.

Invocazione E-Service

Completata la fase di configurazione non resta che procedere all'invocazione del servizio effettuando la verifica per i due soggetti presenti nella mia base dati.
Ripeto dunque la seguente chiamata prima per l'id soggetto di Mario Rossi e dopo per Luigi Bianchi.
1POST /subject-id-verification/check 
2
curl --location '{host}/subject-id-verification/check' --cert '/myLocation/cert.pem' --key '/myLocation/private-key.pem' --header 'x-correlation-id: myUniqueCorrelationId' --header 'Content-Encoding: identity' --header 'apikey: {{apikey}}' --header 'Content-Type: application/json' --header 'Authorization: Bearer {{bearerToken}}' --data '{ "idSubject": "RSSMRA80A01H501U" }' -k

Response:

1{
2  "idSubject": "RSSMRA80A01H501U",
3  "valid": true,
4  "message": "Valid id subject"
5}
6
Ciò che otterremo a seguito delle due invocazioni è il seguente risultato:
  • Mario Rossi: il soggetto è stato trovato e abbiamo ottenuto una risposta positiva che ci indica la validità dell'id inviato
  • Luigi Bianchi: il soggetto non è stato trovato. Il servizio ci ha risposto con successo indicandoci però che l'id soggetto inviato non è più valido

Esito Finale

Dopo aver interrogato l'e-service possiamo procedere all'aggiornamento della nostra base dati in base alle informazioni che abbiamo recuperato.
Di seguito una panoramica della situazione a seguito dell'aggiornamento
IDNomeCognomeData fine validità
RSSMRA80A01H501UMarioRossiNULL
LGUBCH80A01H501BLuigiBianchi01/09/2024
La nostra base dati è stata correttamente aggiornata.

Diagramma di Flusso:

An image

Hai bisogno di aiuto?

Apri un ticket utilizzando l’apposita funzione all’interno della tua Area Riservata

Dicci cosa ne pensi

Per segnalare problemi o dare feedback, puoi aprire una segnalazione su Github