oauth — неверная подпись в Auth 1.0a, реализованная в переполнении стека

public function garminAction(){
$url  =   'http://connectapitest.garmin.com/oauth-service-1.0/oauth/request_token';
$oauth_consumer_key =   'XXXXXXXXX';
$consumerSecret = 'XXXXXXXXX';
$oauth_signature_method =   'HMAC-SHA1';
$oauth_timestamp    =   time();
$oauth_nonce    =   md5(mt_rand());
$oauth_version  =   "1.0";
$sig_string = urlencode($consumerSecret) . '&' . urlencode($oauth_consumer_key);
$base_string1 =
"POST&" .urlencode($url) . "&" .
urlencode(
"oauth_consumer_key=". $oauth_consumer_key
. "&oauth_nonce=" . $oauth_nonce
. "&oauth_signature_method=" . $oauth_signature_method
. "&oauth_timestamp=" .$oauth_timestamp
. "&oauth_version=" . $oauth_version
);$oauthSig = base64_encode(hash_hmac("sha1", $base_string1, $sig_string, true));
echo $oauthSig;
$base_string =

urlencode(
"oauth_consumer_key=" . $oauth_consumer_key
. "&oauth_signature_method=" . $oauth_signature_method
. "&oauth_signature=" . $oauthSig
. "&oauth_timestamp=" . $oauth_timestamp
."&oauth_version=" . $oauth_version
. "&oauth_nonce=" . $oauth_nonce

);

$auth_header = "OAuth ". 'oauth_signature="' . rawurlencode($oauthSig) . '", '
. 'oauth_version="' . rawurlencode($oauth_version) . '", '
. 'oauth_nonce="' . rawurlencode($oauth_nonce) . '", '
. 'oauth_signature_method="' . rawurlencode($oauth_signature_method) . '", '
. 'oauth_consumer_key="' . rawurlencode($oauth_consumer_key) . '", '
. 'oauth_timestamp="' . rawurlencode($oauth_timestamp) .'"';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: ' . $auth_header,
'Content-Type: text/html'
]);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $base_string);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
echo $error = curl_errno ($ch);
$error = curl_error($ch);
echo $response;
curl_close($ch);
exit;

}

Его ответ:
HTTP Status 401 — неверная подпись для метода подписи HMAC-SHA1

Не могли бы вы помочь, где проблема в создании подписей?

1

Решение

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

Смотрите раздел 3.4.1.3.2. «Нормализация параметров» в OAuth RFC.

1

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

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

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