2016-04-25 15 views
1

これは1日間ありました。RailsからUber APIを呼び出す:{"error": "invalid_client"}

Railsを使用してUber APIを呼び出し、アクセストークンを取得できませんでした。認証コードを取得することはできますが、アクセストークンを交換することはできません。

私はOAuth 2.0の宝石ととせずにしようとした私のすべてのキーが正確であることを確認作りました。 2つの別々のUberアカウントでも試してみました。すべての組み合わせで同じエラーが発生します:{"error": "invalid_client"}

下記の非OAuthコードを送信します。 params[:code]は、Uberから返された認証コードです。

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 

ご協力いただきありがとうございます。

+0

'@client_id'と' @client_secret'に正しいデータが含まれていることを確認しましたか? –

+0

@ dan-klassonはい、これらのオブジェクトには適切なデータが含まれています。もう一度ダブルチェックしてください。 – Areios

+0

アップデート:これはカール(https://developer.uber.com/docs/authentication)で自分の鍵と新しく生成された認証コードを手動で送信するときに機能するので、おそらくRailsで何かばかげたことをやっているだけです。 OAuthの新機能 – Areios

答えて

1
  • あなたが{"error": "invalid_client"}を取得する場合、これはあなたが必要とされていないが、ユーバーのOAuthプロバイダ・サーバによって検証された追加のHTTPリクエストヘッダを送信していることを意味します。
    リクエストパラメータ名のスペルが間違っている可能性があります。 (ないあなたのケース)

    ソリューション:あなたは任意のHTTPリクエストヘッダを送信しない、すなわち、あなたのリクエストからAuthorizationヘッダを削除して再試行してくださいする必要があります。

  • あなたはユーバー開発者ダッシュボードに定義された複数のリダイレクトURLを持っていて、ダッシュボードに定義された最初のURLが使用されていることを念頭に置いて1つのキープせずに認証要求を行っている場合:

    If none is provided the default is the first redirect URI provided in the application's dashboard.

    と、もし最初のURLがthe authorize step of the OAuth flowで使用されたURLと一致しない{"error": "access_denied"}

    ただし、最初のURLが承認手順で送信されたURLと一致する場合でもこのエラーが発生していることに気付きました。 Oの各ステップでのredirect_uriパラメータ認証フロー。

    策:[:コード]既に一度使用されているか、または無効になってきたのparams内のコードは、場合あなたは(あなたがAUTHORIZEのステップで使用したのと同じ)要求

  • でREDIRECT_URIパラメータを送信する必要がありますあなたは{"error": "invalid_grant"}

    解決策:アクセストークンを交換するために必要な新しいコードを取得するには、OAuthフローの認証(最初の)手順をやり直す必要があります。

+0

これはトリックでした。私がしなければならなかったのは、各呼び出しにredirect_uriを追加することでしたが、この回答は情報の金鉱でした。フードの下で何が起こっているのかをもっと理解するのを助けるために余分に行くことに感謝します。 – Areios

関連する問題