2

我们在使 REST Api 的身份验证变得健壮时遇到了麻烦。

我们正在使用 api 密钥、时间戳等以及请求正文或 url 查询字符串生成我们的签名哈希。正文中发送的所有内容都必须始终是 JSON,所以没问题。但是对查询字符串进行签名让我们很头疼。

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

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

someurl?{"somekey":"somevalue"}

编辑

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

4

1 回答 1

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;
于 2012-10-26T13:30:50.030 回答