username(Access Key)secret(Secret Key)Secret Key 计算 HMAC 签名Authorization 请求头username 找到对应 secretAuthorization 头。Authorization: hmac username="ACCESS_KEY", algorithm="hmac-sha256", headers="date @request-target", signature="BASE64_SIGNATURE"| 参数 | 类型 | 说明 |
|---|---|---|
| username | string | 客户端 Access Key |
| algorithm | string | HMAC 算法 |
| headers | string | 参与签名的 Header 列表 |
| signature | string | Base64 编码后的签名 |
hmac-sha1
hmac-sha256
hmac-sha384
hmac-sha512hmac-sha256headers="date @request-target"@request-target
host
dateheaders="date host @request-target"headers 指定的字段按顺序拼接。: \nGET /v1/user?id=123 HTTP/1.1
Host: api.example.com
Date: Tue, 12 Mar 2026 10:00:00 GMTheaders="date @request-target"date: Tue, 12 Mar 2026 10:00:00 GMT
@request-target: get /v1/user?id=123@request-target 格式为<method_lowercase> <path_and_query>get /v1/user?id=123signature = Base64(
HMAC-SHA256(
signing_string,
secret
)
)base64(hmac_sha256(signing_string, secret))GET /v1/user?id=123 HTTP/1.1
Host: api.example.com
Date: Tue, 12 Mar 2026 10:00:00 GMT
Authorization: hmac username="demo-client",
algorithm="hmac-sha256",
headers="date @request-target",
signature="mF8F4F3iKQm9R0oU1Y7rj3u0oKkM4sH5c5k7G2Lq="Digest 头用于验证请求体完整性。([Kong Docs][1])Digest: SHA-256=Base64(SHA256(body))Digest: SHA-256=SBH7QEtqnYUpEcIhDbmStNd1MxtHg2+feBfWc1105MA=headers="date @request-target digest"DateX-Date±300 秒401 Unauthorized| 原因 | 说明 |
|---|---|
| signature 不正确 | 签名计算错误 |
| headers 顺序不一致 | 签名字符串不一致 |
| 时间超出范围 | 防重放校验失败 |
| Access Key 不存在 | username 无效 |
@request-target
host
date@request-target
host
date
digest
content-type