Panoramica dei parametri
Al momento dell'attivazione, il sistema fornirà quattro parametri nella sezione "Informazioni Tecniche" della "Schermata di Modifica del Canale Web":
- Chiave Pubblica: Per comprenderne l’utilizzo si rimanda al paragrafo sull’autenticazione.
- Chiave Privata: Per comprenderne l’utilizzo si rimanda al paragrafo sull’autenticazione.
- File con suffisso _MagicStorePublication.csv: questo file è quello che riporta le anagrafiche dei prodotti inviati in pubblicazione.
- File con suffisso _MagicStorePrices.csv: questo file è quello che riporta i prezzi dei prodotti inviati in pubblicazione.
- File con suffisso _MagicStoreQty.csv: questo file è quello che riporta le quantità dei prodotti inviati in pubblicazione.
Autenticazione
Il meccanismo di autenticazione per i servizi REST è basato sulla generazione e validazione di un codice ottenuto tramite algoritmo HMAC (Hash Message Authentication Code) per ciascuna richiesta.
Per autenticare una richiesta è necessario concatenare opportunamente alcuni elementi della richiesta stessa, formando in questo modo un’unica stringa sulla quale eseguire l’algoritmo HMAC. Tale processo consente di «firmare la richiesta» e l’output dell’algoritmo HMAC è detto appunto «firma» del messaggio. Un parametro fondamentale per il calcolo della firma è la Secret Key (Chiave Privata), fornita assieme all’API Key (Chiave Pubblica) al momento della configurazione del Canale Web in MagicStore.
Infine, la firma viene aggiunta al messaggio originale per consentirne la validazione. Quando il sistema riceve una richiesta contenente l’header di autenticazione, recupera, nel proprio sistema, la Secret Key associata all’API Key (quest’ultima trasmessa nell’header della richiesta, insieme alla firma) e la utilizza per ricalcolare in maniera indipendente la firma del messaggio. Se le due firme coincidono il sistema acconsente alla richiesta, altrimenti risponde con un messaggio di errore.
In questo esempio, l’header Authorization contiene la coppia di valori API Key & Signature (firma), separati dai due punti:
- Authentication Signature
La firma contenuta nell’header Authorization è creata partendo da alcuni elementi significativi della richiesta REST, pertanto varierà da richiesta a richiesta. Di seguito è riportato uno pseudocodice che mostra la tecnica utilizzata per costruire la firma. La funzione HMAC- SHA256 riportata nel codice si riferisce all’algoritmo definito nello standard RFC 2104 .
Se la richiesta ha verbo POST o PUT (e quindi ha un body), il valore del campo Content-MD5 è il digest MD5 del solo body della richiesta, come stringa codificata con UTF-8.
Per gli altri metodi HTTP che non prevedono body (GET, DELETE, HEAD) tale campo è una stringa vuota. Il campo Content-Type che dovrebbe avere sempre come valore application/json se le richieste hanno body, e lasciato vuoto altrimenti. I caratteri di ritorno a capo vanno comunque inclusi nella stringa da firmare anche nel caso di campi corrispondenti vuoti.
Il campo Date è il timestamp della richiesta in formato ISO 8601; lo stesso timestamp deve essere riportato anche come header X-EPA- Date nella richiesta. Il campo Resource-Path è il percorso completo della risorsa REST, escludendo dall’URL protocollo, dominio e porta (es. all’URL http://example.com:8980/api/products/2 corrisponde il resource path /api/products/2 comprensivo dello slash iniziale).
Di seguito alcuni esempi di authentication signature e per i quali le credenziali usate sono:
Nota: Il codice \n riportato negli esempi successivi rappresenta il carattere di newline (codice ASCII 0x0A). Inoltre, il valore dell’header Authorization negli esempi è diviso su più righe solo per motivi di spazio, ma non deve contenere alcun carattere di spazio aggiuntivo.
Esempio di GET:
Esempio di POST:
GET /api/products/2 HTTP/1.1
Host: http://api.magicstore.net
X-EPA-Date: 2016-08-16T10:01:59.969Z
Authorization: 562b32b7-b4c1-460f-88fe-37ea2bab93f8:lBqB450CQTDXUpxUyCLn5Mt6kA7JciED43Iz4X16ufI=