簡體   English   中英

Rails — 簽署 OAuth1 請求

[英]Rails — Signing OAuth1 requests

我目前正在嘗試實現一個 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這篇文章的解決方案的末尾添加“&”,但沒有成功。

請賜教!

在我的情況下,問題是在 url 方案的開頭有http:// api.music-story.com...東西替換查詢的 url 參數api.music-story.com...對我api.music-story.com...

您可以使用Ruby Oauth 這是一個示例

consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {site: "http://api.music-story.com"})
access_token = OAuth::AccessToken.new(consumer, token=oauth_access_token, secret=oauth_token_secret )
response = access_token.get("/en/artist/search?name=someartistname")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM