从雅虎获取 Oauth2 令牌时出错:OAuth2::Error invalid_request: {"error":"invalid_request"}

error fetching Oauth2 token from yahoo: OAuth2::Error invalid_request: {"error":"invalid_request"}

我有一个简单的问题让我卡住了。我一直在关注这个雅虎文档 Yahoo OAuth 2.0 Guide . I have been able to generate authorization URL and even get the authorization code.(that is upto Step 3).

但现在我卡在了第 4 步:Exchange authorization code for Access Token. I am also using this Whosebug question Yahoo API with Ruby on Rails and OAUTH2。这是我的代码(我正在使用 sinatra):

get '/yahoo/contacts/oauth2callback' do
  client = OAuth2::Client.new($consumer_id, $consumer_secret, site: $yahoo_base_url, authorize_url: '/oauth2/request_auth', token_url: '/oauth2/get_token')
  code = params[:code] if params[:code]
  puts "Code: #{code}"
  # token = client.auth_code.get_token(code, redirect_uri: $yahoo_redirect_url, headers: { "Authorization" => Basic })
  token = client.auth_code.get_token(code, redirect_uri: $yahoo_redirect_url)
  puts "THIS IS THE NEW TOKEN NOW: #{token}"
end

使用的变量包括:

# for yahoo application
$consumer_id = "dj0yJmk9Q1RKU2x2NTY3WWVxJmQ9WVdrOU1YWnRUV2cyTXpBbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1fth--"
$consumer_secret = "my_secret"
$yahoo_redirect_url = "http://localhost:4567/yahoo/contacts/oauth2callback"

什么导致错误的原因是什么?因为错误来源是这一行。

 token = client.auth_code.get_token(code, redirect_uri: $yahoo_redirect_url)

我做错了什么?

更新:我写错了标题,好像很多人看不出来。 错误是

 OAuth2::Error invalid_request: {“error”:“invalid_request”}
file: client.rb location: request line: 113

返回的 url 看起来像这样:

http://localhost:4567/yahoo/contacts/oauth2callback?code=bck5tkm. 

提取的代码是 bck5tkm

您使用的代码可能已过期或已使用(只能使用一次)。或者您在 POST 请求的 HTTP 基本授权 header 中提供了无效凭据。

假设您使用 intridea OAuth 2.0 客户端 (https://github.com/intridea/oauth2),您可能会遇到一个错误:

https://github.com/intridea/oauth2/pull/192

表示 Yahoo 拒绝在请求正文中允许客户端凭据。拉取请求尚未合并,因此您需要将其应用到您自己的代码中(或找到另一个有效的 gem)。