我有一个让我陷入困境的简单问题。我一直关注这个雅虎文档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
答案 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标头中提供了无效的凭据。