从yahoo获取Oauth2令牌时出错:OAuth2 :: Error invalid_request:{“error”:“invalid_request”}

时间:2015-01-09 13:33:52

标签: ruby oauth-2.0 sinatra yahoo yahoo-api

我有一个让我陷入困境的简单问题。我一直关注这个雅虎文档Yahoo OAuth 2.0 Guide。我已经能够生成授权URL甚至获取授权代码。(这是Step 3)。

但现在我陷入了第4步:Exchange authorization code for Access Token。我也在使用StackOverflow问题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

返回的网址如下所示:

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

正在采取的代码是bck5tkm

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您可能正在使用已过期或已使用过的代码(只能使用一次)。或者您在POST请求的HTTP Basic Authorization标头中提供了无效的凭据。