
Ejemplo de implementación y explicación de HMAC
Un ejemplo de implementación básica de HMAC (Código de autenticación de mensajes basado en hash) usando Flask en Python.
El código de autenticación de mensajes basado en hash (HMAC) proporciona al servidor y al cliente una clave privada que solo es conocida por ese servidor y ese cliente específicos. El cliente crea un HMAC único, o hash, por solicitud al servidor aplicando hash a los datos de la solicitud con las claves privadas y enviándolo como parte de la solicitud. Lo que hace que HMAC sea más seguro que el Código de Autenticación de Mensajes (MAC) es que la clave y el mensaje se someten a hash en pasos separados.

Cuando un cliente envía una solicitud al servidor, incluye los siguientes encabezados:
X-Authorization-Content-HMAC: hash HMAC (URI completa de la solicitud, marca de tiempo Unix actual (UTC) y clave secreta HMAC)
X-Authorization-Timestamp: Marca de tiempo Unix actual del cliente (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
[ Proceso de Solicitud del Cliente ]
Cuando el servidor responde a una solicitud válida, incluye los siguientes encabezados:
X-Response-Content-HMAC: hash HMAC (Cuerpo completo de la respuesta, marca de tiempo Unix actual (UTC) y clave secreta HMAC)
X-Response-Content-TimeStamp: Marca de tiempo Unix actual (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}
[ Proceso de Respuesta ]
Server response HMAC verification successful
--------------
Response timestamp: 2024-03-29T09:25:31
Current time: 2024-03-29T09:25:31
Time difference: 0
Si encuentras esto útil, por favor da una "estrella"🌟 para apoyar mejoras adicionales.