Неправильная подпись PHP Oauth с несколькими параметрами запроса - PullRequest
0 голосов
/ 09 февраля 2019

PHP OAuth генерирует неверную подпись при выполнении запросов к URL-адресам с несколькими параметрами запроса:

$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.

Если посмотреть на исходный код библиотеки Oauth PECL, похоже, что генерация сигнатуры должна соответствовать спецификации (см. *oauth_generate_sig_base).Я немного растерялся после oauth_parse_str и oauth_http_build_query.

Я знаю, что parse_str сохраняет только последнее значение, если только нет квадратных скобок.Вызываемая служба ожидает keyword, а не keyword[], поэтому я не могу просто изменить имя, включив квадратные скобки.

Я что-то не так делаю или это ограничение библиотеки PHP Oauth?Если да, есть ли какие-либо альтернативы, которые я могу использовать для межсерверных API-вызовов с использованием OAuth 1.0a?Большинство библиотек, которые я видел, ориентированы на Twitter / Tumblr и включают весь трехсторонний поток OAuth 1.0a с URL-адресами обратного вызова и токенами.

...