使用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
如果您觉得有帮助,请点个"星"🌟来支持进一步的改进。