PHP Oauth签名不正确,带有多个查询参数

时间:2019-02-09 02:52:58

标签: php oauth oauth-1.0a pecl-oauth

当对具有多个查询参数的URL进行请求时,PHP OAuth生成的签名不正确:

$uri = 'https://example.com/api/v1/person/search?sort=0&keyword=Tyler&keyword=Marissa'

$oauth = new \OAuth($consumerKey, $secret, \OAUTH_SIG_METHOD_HMACSHA1, \OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setVersion('1.0');

echo \oauth_get_sbs('GET', $uri);
// GET&https%3A%2F%2Fexample.com%2Fapi%2Fv1%2Fperson%2Fsearch&keyword%3DMarissa%26sort%3D0

$client = new Client([
    RequestOptions::HEADERS => ['Accept' => 'application/json']
]);

return $client->get($uri, [
    RequestOptions::HEADERS => ['Authorization' => $oauth->getRequestHeader('GET', $uri)]
]);

您可以在oauth_get_sbs函数的输出中看到,生成的签名基字符串完全缺少第一个keyword参数值。

查看PECL Oauth库的源代码,似乎签名生成应该符合规范(请参阅*oauth_generate_sig_base)。在oauth_parse_stroauth_http_build_query之后我有点迷茫。

我知道parse_str仅保留最后一个值,除非有方括号。正在调用的服务需要keyword而不是keyword[],因此我不能简单地更改名称以包括方括号。

我做错什么了吗?这是PHP Oauth库的限制吗?如果是这样,我可以使用OAuth 1.0a进行服务器到服务器的API调用吗?我见过的大多数库都面向Twitter / Tumblr,并涉及带有回调URL和令牌的整个三足OAuth 1.0a流。

0 个答案:

没有答案