SylviaBABY commented on code in PR #6895:
URL: https://github.com/apache/apisix/pull/6895#discussion_r854909134


##########
docs/zh/latest/plugins/hmac-auth.md:
##########
@@ -84,34 +98,33 @@ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 
'X-API-KEY: edd1c9f034335f13
 
 ### 签名生成公式
 
-签名的计算公式为 `signature = HMAC-SHAx-HEX(secret_key, 
signing_string)`,从公式可以看出,想要获得签名需要得到 `secret_key` 和 `signing_string` 两个参数。其中 
`secret_key` 为对应 consumer 所配置的, `signing_string` 的计算公式为 `signing_string = HTTP 
Method + \n + HTTP URI + \n + canonical_query_string + \n + access_key + \n + 
Date + \n + signed_headers_string`。如果 signing_string 中的某一项不存在,也需要使用一个空字符串代替。
+签名的计算公式为 `signature = HMAC-SHAx-HEX(secret_key, signing_string)`。
+
+为了生成签名需要两个参数:`secret_key` 和 `signing_string`。其中 `secret_key` 由对应 Consumer 
配置,`signing_string` 的计算公式为 `signing_string = HTTP Method + \n + HTTP URI + \n + 
canonical_query_string + \n + access_key + \n + Date + \n + 
signed_headers_string`。如果 `signing_string` 中的某一项不存在,也需要使用一个空字符串代替:
 
-1. **HTTP Method**:指 HTTP 协议中定义的 GET、PUT、POST 等请求方法,必须使用全大写的形式。
-2. **HTTP URI**:要求必须以“/”开头,不以“/”开头的需要补充上,空路径为“/”。
-3. **Date**:请求头中的 Date( GMT 格式 )。
-4. **canonical_query_string**:是对于 URL 中的 query( query 即 URL 中 ? 后面的 
key1=valve1&key2=valve2 字符串)进行编码后的结果。
-5. **signed_headers_string**:是从请求头中获取客户端指定的字段,并按顺序拼接字符串的结果。
+- **HTTP Method**:指 HTTP 协议中定义的 GET、PUT、POST 等请求方法,必须使用全大写的形式。
+- **HTTP URI**:HTTP URI。必须以“/”开头,“/”表示空路径。
+- **Date**:请求头中的日期( GMT 格式 )。
+- **canonical_query_string**:对 URL 中的 query(query 即 URL 中 `?` 后面的 
`key1=valve1&key2=valve2` 字符串)进行编码后的结果。
+- **signed_headers_string**:从请求头中获取客户端指定的字段,并按顺序拼接字符串的结果。
 
-> canonical_query_string 编码步骤如下:
+> 生成 `canonical_query_string` 的算法描述如下:
 
-* 提取 URL 中的 query 项,即 URL 中 ? 后面的 key1=valve1&key2=valve2 字符串。
-* 将 query 根据&分隔符拆开成若干项,每一项是 key=value 或者只有 key 的形式。
-* 根据 uri 参数是否编码,有下面两种情况:
-* `encode_uri_param` 为 true 时:
-  * 对拆开后的每一项进行编码处理,分以下两种情况:
-  * 当该项只有 key 时,转换公式为 url_encode(key) + "=" 的形式。
-  * 当该项是 key=value 的形式时,转换公式为 url_encode(key) + "=" + url_encode(value) 的形式。这里 
value 可以是空字符串。
-  * 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 
canonical_query_string 。
-* `encode_uri_param` 为 false 时:
-  * 对拆开后的每一项进行编码处理,分以下两种情况:
-  * 当该项只有 key 时,转换公式为 key + "=" 的形式。
-  * 当该项是 key=value 的形式时,转换公式为 key + "=" + value 的形式。这里 value 可以是空字符串。
-  * 将每一项转换后,以 key 按照字典顺序( ASCII 码由小到大)排序,并使用 & 符号连接起来,生成相应的 
canonical_query_string 。
+1. 提取 URL 中的 query 项。
+2. 使用 `&` 作为分隔符,将 query 拆分成键值对。
+3. 如果 `encode_uri_param` 为 true 时:
+  1. 当该项有 `key` 时,转换公式为 `url_encode(key) + "="`。
+  2. 当该项同时有 `key` `value` 时,转换公式为 `url_encode(key) + "=" + url_encode(value)` 
。此处 `value` 可以是空字符串。

Review Comment:
   ```suggestion
     2. 当该项同时有 `key` 和 `value` 时,转换公式为 `url_encode(key) + "=" + 
url_encode(value)` 。此处 `value` 可以是空字符串。
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to