Rails - Подписание запросов OAuth1 - PullRequest
0 голосов
/ 20 октября 2018

В настоящее время я пытаюсь реализовать API (http://developers.music -story.com ), для аутентификации которого используется технология OAuth 1.0 (запросы также подписаны).Когда я создал свой аккаунт разработчика, они предоставили мне 4 разных ключа, таких как:

oauth_consummer_key = some_hexa_str_long_of_40_chars
consummer_secret = some_other_hexa_str_long_of_40_chars
oauth_access_token = some_other_hexa_str_long_of_40_chars
oauth_token_secret = some_other_hexa_str_long_of_40_chars

До сих пор я пытался подписать запрос вручную, используя некоторый код, найденный здесь и там без успеха.Насколько я понимаю, подпись должна быть своего рода отпечатком самого запроса, но я концептуально не уверен в этом и тем более в том, как это сделать технически.

Вопрос: Какой будет моя OAuth 1 подпись , если мой запрос будет что-то вроде (?):

HTTParty.get("http://api.music-story.com/en/show/search?
oauth_signature=I_DONT_KNOW_HOW_TO_GET_THIS
&oauth_token=I_HAVE_THIS_ONE_ALREADY
&name=whatever")

Edit1: Вот что япытался до сих пор и вызывает (недействительный ключ oauth) ответ API:

oauth_consumer_key = oauth_consummer_key
oauth_nonce = Random.rand(100000).to_s
oauth_signature_method = 'HMAC-SHA1'
oauth_timestamp = Time.now.to_i.to_s
oauth_version = '1.0'

url = "http://api.music-story.com/en/artist/search?"

parameters = 'oauth_consumer_key=' +
              oauth_consumer_key +
              '&oauth_nonce=' +
              oauth_nonce +
              '&oauth_signature_method=' +
              oauth_signature_method +
              '&oauth_timestamp=' +
              oauth_timestamp +
              '&oauth_version=' +
              oauth_version


base_string = 'GET&' + CGI.escape(url) + '&' + CGI.escape(parameters) + '&name=whatever'
secret_key = oauth_token_secret
oauth_signature = CGI.escape(Base64.encode64("#{OpenSSL::HMAC.digest('sha1',secret_key, base_string)}").chomp)

oauth_token = oauth_access_token

response = HTTParty.get("http://api.music-story.com/en/artist/search?name=someartistname&oauth_signature=#{oauth_signature}&oauth_token=#{oauth_token}")
puts JSON.parse(response.to_json)
# {"root"=>{"version"=>"1.29", "code"=>"-3", "error"=>{"type"=>"OAuthException", "message"=>"Incorrect oauth_signature", "errorcode"=>"40107"}}}

Edit2 Я также пытался добавить '&' в конце oauth_token и решения от этот пост безуспешно.

Пожалуйста, просветите меня!

1 Ответ

0 голосов
/ 20 октября 2018

В моем случае проблема заключалась в http:// в начале схемы URL.Замена параметра url запроса чем-то вроде api.music-story.com... работала для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...