Как решить «Неверная подпись. Ожидаемая строка подписи» в OAuth 1.0 - PullRequest
7 голосов
/ 20 июля 2011

Я пытаюсь получить токен доступа и секрет с сайта, используя OAuth. Обмен токеном запроса и секретом запроса проходит нормально, но когда приходит время получить токены доступа, я получаю сообщение об ошибке "Invalid signature. Expected signature base string."

Кто-нибудь видел эту ошибку раньше или знает, что может быть не так? Вот данные, которые я получаю (после urldecode):

Invalid signature. Expected signature base string: POST 
https://www.readability.com/api/rest/v1/oauth/access_token 
oauth_consumer_key=my_consumer_key 
oauth_nonce=d9aff6a0011a633253c5ff9613c6833d79d52cbe 
oauth_signature_method=HMAC-SHA1 
oauth_timestamp=1311186899 
oauth_token=C8GF7D6ytPzQKdZVpy 
oauth_verifier=ncUV4tJSrS 
oauth_version=1.0 
signature=7jUuk6fsEL8XNYxVWcsfGXEreK0%3D 

Ответы [ 5 ]

2 голосов
/ 20 июля 2011

Вы можете посмотреть здесь , это было задано около недели назад.Ответ:

Получение правильной подписи OAuth - всегда огромная боль.Вы должны постараться, чтобы базовая строка, сгенерированная вашей библиотекой, соответствовала той, которую ожидает сервер.Как только это правда, единственный способ, которым вы можете облажаться, это hmac с неправильным ключом (ключами).

1 голос
/ 02 июня 2016

Как описал @genesis, довольно сложно получить правильный ключ подписи, но для этого есть документация, которую можно увидеть по этой ссылке http://oauth.net/core/1.0/#encoding_parameters.

Правило гласит, когда вы работаете с HMAC-SHA1,

  1. Генерирует базовую строку подписи как «Метод (POST / GET / и т.д.)» & «Кодированная строка для вашей цели» & «Кодированная строка вашей подсказки (ключ потребителя, одноразовый номер, подпись») метод, метка времени, токен и версия "
  2. В методе подписи HMAC-SHA1 в качестве ключа алгоритма HMAC-SHA1 используется секрет клиента и секрет токена. Чтобы создать ключ, каждый секрет кодируется в UTF8, кодируется в URL-адресе и объединяется в одну строку с использованием символа «&» в качестве разделителя, даже если любой секретный ключ пуст.
  3. При наличии базовой строки подписи в качестве текста HMAC-SHA1 и составных секретов в качестве ключа клиент генерирует подпись. Алгоритм HMAC-SHA1 будет генерировать строку октетов в качестве результата. Строка октета должна быть закодирована в base64 с заполнением '='
  4. Рассчитанная подпись добавляется в запрос с использованием параметра oauth_signature. Когда подпись проверяется сервером, этот параметр не включается в рабочий процесс подписи, поскольку он не был частью базовой строки подписи, подписанной клиентом. Когда подпись включена в HTTP-запрос, она должна быть правильно закодирована, как того требует метод, используемый для передачи параметров.

Источник: http://nouncer.com/oauth/authentication.html

0 голосов
/ 04 февраля 2014

Я знаю, что это действительно старое, и это может не помочь ни в малейшей степени, но сегодня я кое-что понял, и я сделал rawurlencode() вместо urlencode(), исправив это для меня.

0 голосов
/ 15 июля 2013

Недавно я столкнулся с этой проблемой 1.0, после поиска в Google я нашел веб-сервис, созданный кем-то, кто генерирует подпись для oauth.Это сработало для меня.ссылка здесь .Посмотрите:)

0 голосов
/ 30 июля 2012

Я не могу комментировать ответы по какой-то причине, но чтобы ответить на ваш вопрос в комментарии к ответу выше, вы можете использовать игровую площадку Oauth, чтобы увидеть, как Google хочет, чтобы ваша базовая строка выглядела. http://googlecodesamples.com/oauth_playground/index.php

...