从Rails调用Uber API:{“error”:“invalid_client”}
在这一天。
使用Rails调用Uber API并且无法获取访问令牌。 抓取授权代码可以正常工作,但是交换访问令牌则不行。
我尝试过使用和不使用OAuth 2.0 gem并确保所有密钥都准确无误。 也试过两个独立的优步账户。 所有组合都会出现相同的错误: {"error": "invalid_client"}
。
我将在下面发布非OAuth代码。 params[:code]
是Uber返回的auth代码。
uri = URI.parse('https://login.uber.com/oauth/v2/token') https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true headers = { # authentication content-type is not json # 'Content-Type' => 'application/x-www-form-urlencoded', 'Authorization' => 'Token ' + @server_token } request = Net::HTTP::Post.new(uri.path, headers) request.set_form_data({ 'client_id' => @client_id, 'client_secret' => @client_secret, 'grant_type' => 'authorization_code', 'code' => params[:code] }) response = https.request(request) render :json => response.body
在此先感谢您的帮助。
-
如果您收到
{"error": "invalid_client"}
那么这意味着您要发送一个额外的HTTP请求标头,该标头不是必需的,但是由Uber OAuth提供商服务器validation。
另一个可能的原因可能是您拼错了请求参数名称。 (不是你的情况)解决方案:您需要从请求中删除Authorization标头,然后重试,即不要发送任何HTTP请求标头。
-
如果您在Uber Developers仪表板中定义了多个重定向URL,并且您正在进行身份validation请求,请记住使用仪表板中定义的第一个URL:
如果未提供,则默认值是应用程序仪表板中提供的第一个重定向URI。
如果第一个url与您在OAuth流程的授权步骤中使用的url不匹配,则会收到
{"error": "access_denied"}
但是,我注意到即使第一个URL与使用授权步骤发送的URL匹配,也会引发此错误,因此我建议您在OAuth流程的每一步发送redirect_uri参数。
解决方案:您需要在请求中发送redirect_uri参数(与您在授权步骤中使用的参数相同)
-
如果params [:code]中的代码已被使用过一次或已变为无效,则会出现
{"error": "invalid_grant"}
解决方案:您需要重做OAuth流中的授权(第一)步骤,以获取需要交换访问令牌的新代码。