【问题标题】:Yahoo API with Ruby on Rails and OAUTH2带有 Ruby on Rails 和 OAUTH2 的 Yahoo API
【发布时间】:2012-12-04 14:24:31
【问题描述】:

我有一个从证券交易所获取数据的 RoR 网站,我正在通过 Yahoo API 使用 Yahoo 的财务表。我需要授权才能获得对 YQL 的完全访问权限,这需要我使用 Oauth2。我需要帮助以获取对 Yahoo 的 OAuth 访问权限。

这是我尝试过的:

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 返回给我,但不清楚“代码”是什么。我受到了Question 的启发。

【问题讨论】:

  • OAuth 分两个步骤工作:1)您像上面那样进行调用,传递您的密钥和秘密,这应该可以让您到达可以放置的位置 2)获取授权令牌。然后在后续的内容请求中使用授权令牌。您指出并使用的示例做出了一些假设。我确信有一些很好的例子来说明如何将 OAuth 与 Yahoo 的 API 结合使用——虽然协议相同,但有许多不同的方法——你需要了解 Yahoo 使用的是哪一种。
  • 另外,你没有提到你是否使用了 gem,如果是,是哪一个。
  • 我使用“oauth2”gem。我试过这个教程:developer.yahoo.com/oauth/guide/oauth-requesttoken.html,但我不明白“oauth_signature”所以谷歌说我 OAUTH 是更好的解决方案。
  • 在此处查看有关如何从 ruby​​ 使用 OAuth 的一些示例:developer.yahoo.com/ruby/#oauth
  • 谢谢,但这对我不好,gist.github.com/383159 这没有 OAUTH2 gem。

标签: ruby-on-rails oauth-2.0 yahoo-api


【解决方案1】:

不要问我为什么,但 Yahoo 很难找到他们的 OAuth 2.0 文档。 I found it, though!

此外,您无需明确询问用户“离线”权限即可获得refresh_token,这非常“棒”。在我看来,这对雅虎来说是一个安全问题。 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!

【讨论】:

  • 您还应该找到 my pull request 来解决 OAuth2 gem API 中对授权标头的需求。
  • 这条线有效吗?令牌 = client.auth_code.get_token(代码,redirect_uri:redirect_uri)。我的抛出一个错误。
  • 非常感谢您的回复,所以我想获得令牌的原因是因为我想访问我的雅虎联系人。
  • @maletor 的 PR #192 修复了对授权标头的需求已重做并合并到 github.com/oauth-xx/oauth2/pull/280。它是最后几个版本的一部分。另一个新版本的 gem 即将发布。
【解决方案2】:

根据 quatermain 的要求,我在这里发布我的解决方案作为答案:

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

P/S:我在文档中打错了字,如下:

  • 句子:“我不认为这个 URL 会影响身份验证过程...” --> 应该是“我认为这个 URL 不会影响身份验证过程...”

  • 单词“并且准备通过”-->应该是“并且通过”

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2018-05-16
    • 2015-01-24
    相关资源
    最近更新 更多