Autenticazione e configurazioni
L’integrazione con la piattaforma Numia richiede una corretta configurazione tecnica e la gestione dei meccanismi di autenticazione previsti dal gateway.
In questa sezione vengono descritti:
- i parametri necessari per l’inizializzazione delle transazioni;
- il calcolo della signature;
- la configurazione degli URL di ritorno;
- le logiche di autenticazione e verifica delle richieste.
Una configurazione coerente e sicura garantisce:
- integrità dei dati trasmessi;
- protezione contro manomissioni delle richieste;
- corretta associazione tra transazione e ordine merchant.
Questa sezione rappresenta il riferimento tecnico per assicurare un’integrazione corretta e conforme alle specifiche del gateway.
1. Introduzione
In questa sezione viene descritto come firmare le richieste API per le chiamate REST ai web service Numia, nell’ambito dell’integrazione con i servizi di pagamento eCommerce. La corretta implementazione del meccanismo di firma è un requisito essenziale per garantire autenticazione, integrità e protezione delle comunicazioni tra merchant e gateway.
2. Passi da seguire
Questi sono i passi necessari per la firma di una richiesta:
- Creare un messaggio di richiesta HTTP.
- Creare una stringa in base alle parti del messaggio di richiesta.
- Calcolare la firma, sulla stringa creata al punto precedente, usando l’algoritmo HMAC‑SHA256.
- Aggiungere la firma generata e altre informazioni obbligatorie nell’intestazione
Authorization.
Per informazioni dettagliate su come eseguire i passi 2–4, fare riferimento alla specifica https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-10, che descrive come formare la stringa da firmare, come calcolare la firma e come inserirla nel messaggio di richiesta HTTP.
3. Implementazione
Intestazioni obbligatorie
Sono le intestazioni che devono essere incluse nella stringa da firmare.
Per i messaggi di richiesta GET e DELETE (quando il body è assente), la stringa deve includere almeno:
host(es.host:portin caso di porta diversa da 80 o 443)date(in formato RFC 1123)(request-target)(come descritto nella specifica HTTP Signatures)
Per i messaggi di richiesta PUT e POST (con body presente), la stringa deve includere almeno:
hostdate(request-target)digestnel formato:SHA-256=<hash base64 del contenuto del body>
Per i messaggi di tipo multipart/form-data, la stringa deve includere almeno:
hostdate(request-target)
URL encoding del path e query string
Durante la costruzione della stringa da firmare, applicare l’URL encoding a tutti i parametri presenti nel path e nella query string (ma non alle intestazioni), come specificato nella RFC 3986.
Key Identifier
Nell’intestazione Authorization si deve impostare il parametro:
keyId= valore dimerIdpresente nel messaggio di richiesta, ad esempio:
keyId="1234567890"
Algoritmo della firma
L’algoritmo della firma deve essere HMAC‑SHA256.
Nell’intestazione Authorization va indicato come:
algorithm="hmac-sha256"
prestando attenzione all’uso corretto delle virgolette.
4. Esempi
Esempio di intestazione Authorization
Di seguito un esempio della sintassi generale di un’intestazione Authorization per una richiesta con body:
Authorization: Signature keyId="${merId}",algorithm="hmac-sha256",headers="host date (request-target) digest",signature="${Base64(HMAC-SHA256(signing_string))}"
Per le specifiche complete sulla formazione della stringa da firmare, consulta: https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-10
Esempi di codice
Di seguito alcune librerie e riferimenti per firmare le richieste API in diversi linguaggi:
-
Java Implementazione pronta: https://github.com/tomitribe/http-signatures-java
-
PHP Libreria: https://github.com/99designs/http-signatures-php
-
Ruby Libreria: https://github.com/99designs/http-signatures-ruby