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>
Esempio di valore digest:
SHA-256=6iJfkOF3ra8+t09DtcpwjR6Kxt6lnv+aF5GtzZm6ue0=
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 con lo stesso valore del merId presente 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, consultare: https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-10
Esempi di codice
Di seguito alcuni esempi di 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
5. Endpoint
Di seguito gli endpoint base da utilizzare per le chiamate ai web service Numia, in base all'ambiente di destinazione.
| Ambiente | URL base |
|---|---|
| Test | https://testecommerce.numiapos.com/SINE_CG_SERVICES |
| Produzione | https://ecommerce.numiapos.com/IGFS_CG_SERVICES |
Negli esempi di questa documentazione il placeholder {{endpoint}} va sostituito con l'URL base corrispondente all'ambiente in uso (Test o Produzione).