Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在计算HMAC时,如何确定HTTP请求参数顺序?_Http_Hmac - Fatal编程技术网

在计算HMAC时,如何确定HTTP请求参数顺序?

在计算HMAC时,如何确定HTTP请求参数顺序?,http,hmac,Http,Hmac,我正在编写一个Web服务,它将使用HMAC进行身份验证。快速概述:HMAC是使用消息正文和密钥计算的消息摘要。发送方计算HMAC并将其附加到请求,然后接收方在收到消息时使用其存档的密钥计算消息摘要。如果摘要是相同的,那么接收者可以确定消息是由他们声称的人发送的 我的问题是关于参数顺序。假设Web服务请求有三个参数,foo、bar和baz。HTTP POST的正文将类似于: foo=1&bar=2&baz=3&hmac=de7c9b85b8b78aa6bc8a7a36f70

我正在编写一个Web服务,它将使用HMAC进行身份验证。快速概述:HMAC是使用消息正文和密钥计算的消息摘要。发送方计算HMAC并将其附加到请求,然后接收方在收到消息时使用其存档的密钥计算消息摘要。如果摘要是相同的,那么接收者可以确定消息是由他们声称的人发送的

我的问题是关于参数顺序。假设Web服务请求有三个参数,foo、bar和baz。HTTP POST的正文将类似于:

foo=1&bar=2&baz=3&hmac=de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
(本例中的HMAC是一个假例子。)

通常HTTP参数顺序并不重要,但在计算散列时,它是重要的。服务器是否应该接受原始传入请求,删除“hmac”参数(当然,它不是散列计算的一部分),并对其进行散列?或者,为了正确计算散列,必须遵循商定的参数顺序吗


前一种方法给服务器端的实现者带来了更多的负担,但它更健壮。我真正想问的是在客户端构建东西的开发人员的期望。他们是否期望不管参数的顺序如何,事情都能正常工作?

我想说,在计算了基于请求体的散列(这对请求是否被接受很重要)之后,操纵请求体通常是一种不好的做法(我觉得原因很明显)。该HMAC不应附加到请求主体,而应在GET参数、cookie或自定义头中设置

对于您的第一个建议,这也减少了服务器端实现者的
负担,这就是我推荐的路径


但那就是我,其他人可能对所有这些都有不同的看法…

这是我采用的方法,唯一的缺点是使用Java只能获得原始请求的一次机会,因此如果使用完整的请求体来计算HMAC,则必须自己提取所有参数。