Flaskを使用したPythonでの基本的なHMAC(ハッシュベースのメッセージ認証コード)の実装例。
ハッシュベースのメッセージ認証コード(HMAC)は、サーバーとクライアントにそれぞれ、その特定のサーバーとその特定のクライアントのみが知る秘密鍵を提供します。クライアントは、リクエストデータを秘密鍵でハッシュ化し、それをリクエストの一部として送信することで、リクエストごとに一意のHMAC(ハッシュ)を作成します。HMACがメッセージ認証コード(MAC)よりも安全な理由は、鍵とメッセージが別々のステップでハッシュ化されることにあります。

クライアントがサーバーにリクエストを送信する際、以下のヘッダーを含めます:
X-Authorization-Content-HMAC: HMACハッシュ (リクエストURI全体、現在のUnixタイムスタンプ(UTC)、HMAC秘密鍵)
X-Authorization-Timestamp: クライアントの現在のUnixタイムスタンプ(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
[ クライアントリクエスト処理 ]
サーバーが有効なリクエストに応答する際、以下のヘッダーを含めます:
X-Response-Content-HMAC: HMACハッシュ (レスポンスボディ全体、現在のUnixタイムスタンプ(UTC)、HMAC秘密鍵)
X-Response-Content-TimeStamp: 現在のUnixタイムスタンプ(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}
[ レスポンス処理 ]
Server response HMAC verification successful
--------------
Response timestamp: 2024-03-29T09:25:31
Current time: 2024-03-29T09:25:31
Time difference: 0
これが役に立ったと思われたら、「スター」🌟を付けてさらなる改善を支援してください。