
HMAC-Implementierungsbeispiel und Erklärung
Eine Beispielimplementierung von grundlegendem HMAC (Hash-basierter Nachrichtenauthentifizierungscode) mit Flask in Python.
Der hash-basierte Nachrichtenauthentifizierungscode (HMAC) stellt dem Server und dem Client jeweils einen privaten Schlüssel zur Verfügung, der nur diesem bestimmten Server und diesem bestimmten Client bekannt ist. Der Client erstellt pro Anfrage an den Server einen eindeutigen HMAC oder Hash, indem er die Anfragedaten mit den privaten Schlüsseln hasht und sie als Teil einer Anfrage sendet. Was HMAC sicherer macht als den Message Authentication Code (MAC), ist, dass der Schlüssel und die Nachricht in separaten Schritten gehasht werden.

Wenn ein Client eine Anfrage an den Server sendet, enthält sie die folgenden Header:
X-Authorization-Content-HMAC: HMAC-Hash (gesamte Anfrage-URI, aktueller Unix-Zeitstempel (UTC) und HMAC-Geheimschlüssel)
X-Authorization-Timestamp: aktueller Unix-Zeitstempel des Clients (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
[ Client-Anfrageprozess ]
Wenn der Server auf eine gültige Anfrage antwortet, enthält sie die folgenden Header:
X-Response-Content-HMAC: HMAC-Hash (gesamter Antwortbody, aktueller Unix-Zeitstempel (UTC) und HMAC-Geheimschlüssel)
X-Response-Content-TimeStamp: aktueller Unix-Zeitstempel (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}
[ Antwortprozess ]
Server response HMAC verification successful
--------------
Response timestamp: 2024-03-29T09:25:31
Current time: 2024-03-29T09:25:31
Time difference: 0
X-Authorization-Timestamp) mit der aktuellen Serverzeit vergleicht. Liegt der Zeitstempel außerhalb eines bestimmten Zeitrahmens, kann der Server die Anfrage verwerfen.Wenn dies hilfreich ist, geben Sie bitte einen "Stern"🌟, um weitere Verbesserungen zu unterstützen.