Yahoo API с Ruby on Rails и OAUTH2

Имам сайт на RoR, който получава данни от фондовите борси и използвам финансовата таблица на Yahoo чрез API на Yahoo. Имам нужда от разрешение, за да получа пълен достъп до YQL, което изисква да използвам Oauth2. Имам нужда от помощ за получаване на OAuth достъп до Yahoo.

Това е, което опитах:

client = OAuth2::Client.new(oauth_consumer_key,oauth_consumer_secret, {
        access_token_path:   '/oauth/v2/get_token',
        authorize_path:      '/oauth/v2/request_auth',
        authorize_url:       'https://api.login.yahoo.com/oauth/v2/request_auth',
        request_token_path:  '/oauth/v2/get_request_token',
        site:                'https://api.login.yahoo.com'
    })
puts client.auth_code.authorize_url( redirect_uri: "http://localhost:3000")
code = gets.chomp
token = client.auth_code.get_token(code, redirect_uri: "http://localhost:3000")

Не знам кой "код" трябва да използвам. Authorize_url ми връща това URL, но то не е ясно какъв е "кодът". Бях вдъхновен от този Въпрос.


person quatermain    schedule 04.12.2012    source източник
comment
OAuth работи в две стъпки: 1) правите повикване като това по-горе, предавайки вашия ключ и тайна, което трябва да ви отведе до място, където можете 2) получавате токен за оторизация. След това маркерът за оторизация се използва в последващи заявки за съдържание. Примерът, който посочихте и използвате, прави някои предположения. Сигурен съм, че има добри примери за това как да използвате OAuth с API на Yahoo - въпреки че протоколът е един и същ, има няколко различни подхода - трябва да разберете кой използва Yahoo.   -  person Tom Harrison    schedule 04.12.2012
comment
Освен това не споменавате дали използвате скъпоценен камък и ако да, кой.   -  person Tom Harrison    schedule 04.12.2012
comment
Използвам oauth2 gem. Опитах този урок: developer.yahoo.com/oauth/guide/oauth-requesttoken .html, но не разбирам oauth_signature, така че Google ми казва, че OAUTH е по-доброто решение.   -  person quatermain    schedule 04.12.2012
comment
Вижте тук за някои примери как да използвате OAuth от ruby: developer.yahoo.com/ruby/#oauth   -  person Tom Harrison    schedule 04.12.2012
comment
благодаря, но не е добре за мен, gist.github.com/383159 това е без OAUTH2 gem .   -  person quatermain    schedule 04.12.2012
comment
Мисля, че от тук нататък зависи от теб. Страницата, която свързах, има няколко добри примера и Google трябва да предостави още повече.   -  person Tom Harrison    schedule 04.12.2012
comment
Благодаря ви, но смятате, че имам проблем с моя код или трябва да получа от кода на yahoo, за да разреша API (d.pr /i/qj3i)?   -  person quatermain    schedule 04.12.2012
comment
И така ... кодът, върнат от gets.chomp, не е ли този, който трябва да въведете във формуляра?   -  person Tom Harrison    schedule 04.12.2012
comment
gets.chomp чете от клавиатурата, така че трябва да имам кода, но го нямам.   -  person quatermain    schedule 04.12.2012
comment
Базирам се на основния код, предоставен от quatermain по-горе, и създадох подробно описание тук (Коства ми 5 дни, за да удостоверя автентичността си с yahoo и да направя успешно повикване към yahoo API): docs.google.com/document/d/   -  person datnt    schedule 09.11.2013
comment
@datnt го добавете като отговор, моля.   -  person quatermain    schedule 11.11.2013


Отговори (2)


Не ме питайте защо, но Yahoo направи много трудно намирането на тяхната OAuth 2.0 документация. Намерих го обаче!

Освен това е доста „страхотно“, че получавате refresh_token, без да е необходимо изрично да питате потребителя за „офлайн“ разрешения. Според мен това е проблем за сигурността на Yahoo. И Google, и Microsoft изискват изричен „офлайн“ достъп.

require 'oauth2'

OAuth2::Client.new(Rails.application.secrets.yahoo_consumer_id, Rails.application.secrets.yahoo_consumer_secret, site: 'https://api.login.yahoo.com', authorize_url: '/oauth2/request_auth', token_url: '/oauth2/get_token')
client.auth_code.authorize_url(redirect_uri: redirect_uri, headers: { "Authorization" => basic_authorization })
token = client.auth_code.get_token(code, redirect_uri: redirect_uri)

# Later
token.refresh!
person maletor    schedule 11.09.2014
comment
Трябва също така да намерите моята заявка за изтегляне, за да коригирате необходимостта от заглавки за оторизация в OAuth2 gem API. - person maletor; 13.09.2014
comment
работи ли тази линия? токен = client.auth_code.get_token(код, redirect_uri: redirect_uri). моята извежда грешка. - person ben; 16.01.2015
comment
Благодаря много за отговора, така че причината, поради която исках да получа токена, е, че исках да получа достъп до контактите си в Yahoo. - person ben; 17.01.2015
comment
PR #192 на @maletor за коригиране на необходимостта от заглавки за оторизация беше преработен и обединен в github .com/oauth-xx/oauth2/pull/280. Беше част от последните няколко издания. Скоро ще излезе още едно ново издание на скъпоценния камък. - person Peter H. Boling; 07.03.2018

По искане на quatermain, публикувам моето решение като отговор тук:

https://docs.google.com/document/d/1SdGSfakQM3ZuiqJK7keXhOfh6310-z_h0THl1_Jswxk/pub

P/S: Има някаква грешка, която направих в документа, както е показано по-долу:

  • Изречението: „Не смятам, че този URL адрес засяга процеса на удостоверяване...“ --> трябва да бъде „Не мисля, че този URL адрес засяга процеса на удостоверяване...“

  • Думата "и готово" --> трябва да бъде "и прочетено"

person datnt    schedule 14.11.2013