Получение неверной подписи при доступе к токенам в Trello API OAuth

Я пытаюсь реализовать оболочку для trello api в PHP. Я получаю «Неверную подпись» на последнем шаге процесса OAuth, где я должен получить токены доступа из trello api.
Просто по этому сообщению я просто не могу отладить, что я делаю не так.

В основном то, что я сделал, было …

  1. Отправить запрос на получение токенов запроса (https://trello.com/1/OAuthGetRequestToken). Это прошло хорошо. Я вернул два параметра oauth_token а также oauth_token_secret в ответ.
  2. Затем я открыл URL страницы авторизации Trello (https://trello.com/1/OAuthAuthorizeToken) с параметрами oauth_token с шага 1, имя приложения и URL-адрес возврата на localhost. Это тоже прошло хорошо. Trello перенаправляется на localhost / callback с параметрами oauth_token а также oauth_verifier,
  3. В обратном вызове я наконец отправил запрос на получение токенов доступа (https://trello.com/1/OAuthGetAccessToken). я добавил oauth_token & oauth_token_secret с шага 1, oauth_verifier из шага 2 и подписи с помощью HMAC-SHA1 метод. Это пошло не так, когда я получил внутреннюю ошибку 500 с сообщением «Неверная подпись» !!!

У кого-нибудь есть идея, что может быть не так?

Вот код, который я использовал в обратном вызове.

$nonce = md5(mt_rand());
$timestamp = time();

$oauth_signature_base = 'GET&'.
rawurlencode('https://trello.com/1/OAuthGetAccessToken').'&'.
rawurlencode(implode('&', [
'oauth_consumer_key='.rawurlencode('CONSUMER_KEY_HERE'),
'oauth_nonce='.rawurlencode($nonce),
'oauth_signature_method='.rawurlencode('HMAC-SHA1'),
'oauth_timestamp='.rawurlencode($timestamp),
'oauth_token='.rawurlencode('OAUTH_TOKEN_HERE'),
'oauth_token_secret='.rawurlencode('OAUTH_TOKEN_SECRET_HERE'),
'oauth_verifier='.rawurlencode('OAUTH_VERIFIER_HERE'),
'oauth_version='.rawurlencode('1.0')
]));

$signature = base64_encode(hash_hmac('sha1', $oauth_signature_base, 'CONSUMER_SECRET_HERE&', true));

$params = [
'oauth_consumer_key='.rawurlencode('CONSUMER_KEY_HERE'),
'oauth_nonce='.rawurlencode($nonce),
'oauth_signature_method='.rawurlencode('HMAC-SHA1'),
'oauth_timestamp='.rawurlencode($timestamp),
'oauth_token='.rawurlencode('OAUTH_TOKEN_HERE'),
'oauth_token_secret='.rawurlencode('OAUTH_TOKEN_SECRET_HERE'),
'oauth_verifier='.rawurlencode('OAUTH_VERIFIER_HERE'),
'oauth_version='.rawurlencode('1.0'),
'oauth_signature='.rawurlencode($signature)
];
file_get_contents(sprintf('%s?%s', 'https://trello.com/1/OAuthGetAccessToken', implode('&', $params)));

0

Решение

Секрет маркера oauth не должен включаться в параметры URL-адреса ни при генерации базовой строки, ни при отправке фактического запроса. Секрет токена используется только как часть хеш-ключа. Смотрите модифицированный код ниже:

$nonce = md5(mt_rand());
$timestamp = time();

$oauth_signature_base = 'GET&'.
rawurlencode('https://trello.com/1/OAuthGetAccessToken').'&'.
rawurlencode(implode('&', [
'oauth_consumer_key='.rawurlencode('CONSUMER_KEY_HERE'),
'oauth_nonce='.rawurlencode($nonce),
'oauth_signature_method='.rawurlencode('HMAC-SHA1'),
'oauth_timestamp='.rawurlencode($timestamp),
'oauth_token='.rawurlencode('OAUTH_TOKEN_HERE'),
'oauth_verifier='.rawurlencode('OAUTH_VERIFIER_HERE'),
'oauth_version='.rawurlencode('1.0')
]));

//token secret should be (singly) URL encoded if not already
$signature = base64_encode(hash_hmac('sha1', $oauth_signature_base, 'CONSUMER_SECRET_HERE&TOKEN_SECRET_HERE', true));

$params = [
'oauth_consumer_key='.rawurlencode('CONSUMER_KEY_HERE'),
'oauth_nonce='.rawurlencode($nonce),
'oauth_signature_method='.rawurlencode('HMAC-SHA1'),
'oauth_timestamp='.rawurlencode($timestamp),
'oauth_token='.rawurlencode('OAUTH_TOKEN_HERE'),
'oauth_verifier='.rawurlencode('OAUTH_VERIFIER_HERE'),
'oauth_version='.rawurlencode('1.0'),
'oauth_signature='.rawurlencode($signature)
];
file_get_contents(sprintf('%s?%s', 'https://trello.com/1/OAuthGetAccessToken', implode('&', $params)));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]