
Esempio e spiegazione dell'implementazione HMAC
Un esempio di implementazione di base di HMAC (Hash-based Message Authentication Code) utilizzando Flask in Python.
Il codice di autenticazione dei messaggi basato su hash (HMAC) fornisce al server e al client ciascuno una chiave privata nota solo a quel server e a quel client specifici. Il client crea un HMAC, o hash, unico per ogni richiesta al server, eseguendo l'hashing dei dati della richiesta con le chiavi private e inviandolo come parte di una richiesta. Ciò che rende HMAC più sicuro del Message Authentication Code (MAC) è che la chiave e il messaggio vengono sottoposti a hashing in passaggi separati.

Quando un client invia una richiesta al server, include le seguenti intestazioni:
X-Authorization-Content-HMAC: hash HMAC (URI completo della richiesta, timestamp Unix corrente (UTC) e chiave segreta HMAC)
X-Authorization-Timestamp: timestamp Unix corrente del client (UTC)
(request)
GET /example/users?user=test&institutionID=999&signature=7e745d74b69b7f62e8e2 HTTP/1.1
Host: example.com
X-Authorization-Content-HMAC: 1c73495878ccea24af9dd281a4c883c40a3551ba799d30f4ad7d9afb6a60fbd4
X-Authorization-Timestamp: 1711662980
[ Processo di richiesta del client ]
Quando il server risponde a una richiesta valida, include le seguenti intestazioni:
X-Response-Content-HMAC: hash HMAC (corpo completo della risposta, timestamp Unix corrente (UTC) e chiave segreta HMAC)
X-Response-Content-TimeStamp: timestamp Unix corrente (UTC)
(response)
HTTP/2 200 OK
Date: Fri, 29 Mar 2024 06:50:49 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 52
X-Response-Content-HMAC: 529c33aac3e33bf2a95d534f8b3ac61dee2ed79232d729e571dc669417a1a2ae
X-Response-Content-TimeStamp: 1711663027
Connection: close
{"result": "ok", "users": "test", "sub": 2840345654}
[ Processo di risposta ]
Verifica HMAC della risposta del server riuscita
--------------
Timestamp della risposta: 2024-03-29T09:25:31
Ora corrente: 2024-03-29T09:25:31
Differenza di orario: 0
X-Authorization-Timestamp) inviata dal client nell'intestazione della richiesta con l'ora corrente del server. Se il timestamp cade al di fuori di un certo intervallo, il server può scartare la richiesta.Se lo trovi utile, lascia una "stella"🌟 per supportare ulteriori miglioramenti.