IT评测·应用市场-qidao123.com技术社区

标题: apisix~hmac-auth插件的使用 [打印本页]

作者: 三尺非寒    时间: 2025-3-29 04:28
标题: apisix~hmac-auth插件的使用
hmac-auth插件需要和 Consumer 一起使用,API 的使用者必须将密匙添加到请求头中以验证其请求,下面介绍它的主要用法
参数

消耗者配置


签名生成的过程

接下来,我们将以下述请求为例,为你介绍签名生成公式的详细计算过程:
  1. curl -i http://127.0.0.1:9080/index.html?name=james&age=36 \
  2. -H "X-HMAC-SIGNED-HEADERS: User-Agent;x-custom-a" \
  3. -H "x-custom-a: test" \
  4. -H "User-Agent: curl/7.29.0"
复制代码
  1. "GET"
复制代码
  1. "GET
  2. /index.html"
复制代码
  1. "GET
  2. /index.html
  3. age=36&name=james"
复制代码
  1. "GET
  2. /index.html
  3. age=36&name=james
  4. user-key"
复制代码
  1. "GET
  2. /index.html
  3. age=36&name=james
  4. user-key
  5. Tue, 19 Jan 2021 11:33:20 GMT"
复制代码
因为人家apisix服务端lua插件源码,使用的是这种GMT格式,所以咱们使用者也需要跟人家保持一致,事实上,我更倾向于使用时间戳,没有日期格式和时区的问题

根据 HTTP Method + \n + HTTP URI + \n + canonical_query_string + \n + access_key + \n + Date + \n + signed_headers_string + \n,得到完备的 signing_string 为:
  1. "GET
  2. /index.html
  3. age=36&name=james
  4. user-key
  5. Tue, 19 Jan 2021 11:33:20 GMT
  6. User-Agent:curl/7.29.0
  7. x-custom-a:test
  8. "
复制代码
Body请求体校验
当 validate_request_body 设置为 true 时,插件将计算请求 body 的 hmac-sha 值,并与请求 headers 中的 X-HMAC-DIGEST 的值进行校验。
X-HMAC-DIGEST: base64(hmac-sha(<body>))
  1. X-HMAC-DIGEST: base64(hmac-sha(<body>))
复制代码
假如没有请求 body,你可以将 X-HMAC-DIGEST 的值设置为空字符串的 HMAC-SHA。
留意:
当开启 body 校验时,为了计算请求 body 的 hmac-sha 值,该插件会把 body 加载到内存中,在请求 body 较大的环境下,大概会造成较高的内存消耗。
为了避免这种环境,你可以通过设置 max_req_body(默认值是 512KB)配置项来配置最大允许的 body 巨细,body 超过此巨细的请求会被拒绝。
测试插件

假设当前请求为:
  1. curl -i http://127.0.0.1:9080/index.html?name=james&age=36 \
  2. -H "X-HMAC-SIGNED-HEADERS: User-Agent;x-custom-a" \
  3. -H "x-custom-a: test" \
  4. -H "User-Agent: curl/7.29.0"
复制代码
通过以下 Python 代码为上述请求生成签名 SIGNATURE:
  1. import base64import hashlibimport hmacsecret = bytes('my-secret-key', 'utf-8')message = bytes("""GET
  2. /index.html
  3. age=36&name=james
  4. user-key
  5. Tue, 19 Jan 2021 11:33:20 GMT
  6. User-Agent:curl/7.29.0
  7. x-custom-a:test
  8. """, 'utf-8')hash = hmac.new(secret, message, hashlib.sha256)# to lowercase base64print(base64.b64encode(hash.digest()))
复制代码
TypeHashSIGNATURE8XV1GB7Tq23OJcoz6wjqTs4ZLxr9DiLoY4PxzScWGYg=你也可以参考 Generating HMAC signatures 了解如何使用差别的编程语言生成签名。
签名生成后,你可以通过以下示例使用生成的签名发起请求:
  1. curl -i "http://127.0.0.1:9080/index.html?name=james&age=36" \
  2. -H "X-HMAC-SIGNATURE: 8XV1GB7Tq23OJcoz6wjqTs4ZLxr9DiLoY4PxzScWGYg=" \
  3. -H "X-HMAC-ALGORITHM: hmac-sha256" \
  4. -H "X-HMAC-ACCESS-KEY: user-key" \
  5. -H "Date: Tue, 19 Jan 2021 11:33:20 GMT" \
  6. -H "X-HMAC-SIGNED-HEADERS: User-Agent;x-custom-a" \
  7. -H "x-custom-a: test" \
  8. -H "User-Agent: curl/7.29.0"
  9. HTTP/1.1 200 OK
  10. Content-Type: text/html; charset=utf-8
  11. Transfer-Encoding: chunked
  12. Connection: keep-alive
  13. Date: Tue, 19 Jan 2021 11:33:20 GMT
  14. Server: APISIX/2.2
  15. ......
复制代码
你也可以将签名放到请求头 Authorization 字段中:
  1. curl http://127.0.0.1:9080/index.html \
  2. -H 'Authorization: hmac-auth-v1# + ACCESS_KEY + # + base64_encode(SIGNATURE) + # + ALGORITHM + # + DATE + # + SIGNED_HEADERS' -i
复制代码
postman测试结果
)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4