签署查询字符串以进行身份​​验证

时间:2012-10-26 13:05:28

标签: php api rest authentication

我们在为REST Api进行身份验证时遇到了麻烦。

我们使用api密钥,时间戳等等以及请求正文或url查询字符串生成我们的签名哈希。身体中发送的所有内容必须始终为JSON,这样就没问题了。 但签署查询字符串让我们头疼。

  

必须通过签署查询参数来验证所有REST查询   使用私有凭证以小写,字母顺序排序   作为签名令牌。签名应该在URL编码之前进行   查询字符串。

但现在使用键[0] = somevalue& key [1] = someothervalue。怎么订购? 另一种方法是始终在查询字符串中强制使用JSON,这是一个可行的解决方案吗?

someurl { “somekey”: “someValue中”}?

修改

让我们达到这一点的问题如下:我(客户端)使用?a = value1& b = value2发送请求,并使用此查询字符串创建哈希。但是我们的请求失败了,因为服务器(Apache,PHP)有时会收到?b = value2& a = value1。散列会产生不同的结果,因此失败的身份验证。

1 个答案:

答案 0 :(得分:0)

不确定我是否正确关注,所以你有一个包含名为$key的参数的数组? 这需要按字母顺序排列吗?

我会做以下

sort($key);
$queryStr = '';
for($k = 0; $k < count($key); $k++)
{
      $queryStr .= 'key['.$k.']='.strtolower($key[$k]);
      if($k < count($key)-1)
             $queryStr .= '&';
}

$restURL = 'someurl?'.$queryStr;