2013-01-24 11 views
6

LinkedIn APIをテストし、LinkedInのOAuthプロバイダに対して認証するためのMeteor JSスマートパッケージを作成しようとすると、私は全面的なロードブロッキングを実行しました。LinkedIn APIにコマンドラインカールを使用して有効なoauthトークンを生成できないのはなぜですか?

these directionsを、以下では、私はの形で、成功した認証要求で使用するためoauth_tokenを生成することができた:

https://www.linkedin.com/uas/oauth/authorize?oauth_token={oauth_token} 

Rubyスクリプトによって生成されたトークンを使用してブラウザにそれを置くこと次のようになります。

require 'oauth' 

api_key = '{linkedin api key}' 
api_secret = '{linkedin api secret}' 

configuration = { :site => 'https://api.linkedin.com', 
          :authorize_path => '/uas/oauth/authenticate', 
          :request_token_path => '/uas/oauth/requestToken', 
          :access_token_path => '/uas/oauth/accessToken' } 

consumer = OAuth::Consumer.new(api_key, api_secret, configuration) 

request_token = consumer.get_request_token 
puts request_token.params[:oauth_token] 

私は、簡単にURIの上に使用して、ブラウザでのクエリ文字列のparamとしてトークンをダンプし、LinkedInの許可]ダイアログボックスが表示されます。

有効なトークンに表示されますのLinkedIn認証ウィンドウ: enter image description here

コマンドラインのカール要求を書き込もうとしたときに、その同じURLで使用する場合残念ながら、生成されoauth_tokenが失敗しました。確かに、それはリンクインが500エラーで応答し、ブラウザが標準500エラーウィンドウを表示します。応答はなし追加の詳細が付属しています。ここでは

500 error

は、私は新しいoauth_tokenのためのLinkedInに私のカールリクエストで実装していたもののようなコードです:

[email protected] accounts-linkedin (fixes_for_meteor_0_5_4)* $ cat linkedin_oauth_gen.sh 

curl -X POST https://api.linkedin.com/uas/oauth/requestToken --verbose --header 'Authorization: OAuth oauth_nonce="0d9a3e40660811e2bcfd0800200c9a66",oauth_timestamp="1359019570",oauth_version="1.0",oauth_signature_method="HMAC-SHA1",oauth_consumer_key="{oauth_consumer_key}",oauth_signature="{oauth_signature}"' 

それは注目に値します私はLinkedIn's OAuth test consoleを使用してAuthorizationヘッダーを生成していました。

Meteor JSスマートパッケージ内で同様の機能を実装しようとすると同じ問題が発生するため、これは重要です。

しかし、私の主な質問は、上記のルビーコードを使っても可能ですが、単純なカールシェルコマンドを使用すると、トークンが有効に生成されないようです(またはLinkedInは単純にそれを尊重するために)...

+1

FWIW、私はこれを詳しく読んでいます:http://developer.linkedin.com/documents/common-issues-oauth-authentication – zealoushacker

+0

このスレッドはlinkedin開発者フォーラムで見つかりました: http:///developer.linkedin.com/forum/500-internal-server-error-when-authorizing-user#comment-21135 – zealoushacker

答えて

5

いつものように、悪魔は細部の中で最も小さいです。

この問題を解決するにあたり、私はrubyスクリプトがoauthライブラリを介して作成していた要求を偵察するために、これまでに素晴らしいCharles Proxyを使用しました。

それは私が私のコードで背中を見ながら成功したルビー要求をスパイとoauth_callback認証いじりによって発見され、私はカールからと流星からの要求を作成しようとしていたかと2つの明確な問題があった判明したようにヘッダーパラメーターを使用して問題をリバースエンジニアリングします。

これらの問題のいずれか、または組み合わせにより、無効で認識できないoauthトークンが生成されました。 401を返す代わりに、linkedinがトークンを生成しました!ああ、このトークンは役に立たなかった。ここ

が(それぞれの後の理由で)失敗する2つの異なる要求認証ヘッダである:

Authorization: OAuth oauth_body_hash="2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D", oauth_callback="http%3A%2F%2Flocalhost%3A3000%2F_oauth%2Flinkedin%3Fclose", oauth_consumer_key="*********", oauth_nonce="SJ3DSTHLh0T4UcqzYOUOqubIeWN9FERCePm5ro35EY", oauth_signature="*********", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1359081520", oauth_version="1.0" 

この最初の例では、問題がoauth_callback paramは、不正な形式のクエリ文字列のparamを有することです。 ?close=trueのように、値なしの?closeのようなクエリ文字列パラメータを持つと、リクエストが完全にfubaredされることがわかります。なぜ私はまだ正確にはわからないが、そうであるようだ。この第2の例で

Authorization: OAuth oauth_body_hash="2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D", oauth_callback="http%3A%2F%2Flocalhost%3A3000%2F_oauth%2Flinkedin%3Fclose", oauth_consumer_key="*********", oauth_nonce="SJ3DSTHLh0T4UcqzYOUOqubIeWN9FERCePm5ro35EY", oauth_signature="*********", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1359081520", oauth_version="1.0" 

、問題はoauth_callbackはそのドメインlocalhostを有することです。リンクされているoauthプロバイダの中には、oauth_callbackパラメータ(FQDNまたはIPアドレス)のホスト名が好きではないことが判明しました。なぜ私はビート。 127.0.0.1を使用する必要があります。正当な理由はありませんが、ただです。ラメですが、本当です。

この1つは動作します:

Authorization: OAuth oauth_body_hash="2jmj7l5rSw0yVb%2FvlWAYkK%2FYBwk%3D", oauth_callback="http%3A%2F%2F127.0.0.1%3A3000%2F_oauth%2Flinkedin%3Fclose%3Dtrue%26state%3D0e314d0d-a5ca-40ca-8fcd-caa1cfce3ed4", oauth_consumer_key="*********", oauth_nonce="0KBnMSMI8NNk1cXn0YyTRpUnPdnqAX7F06KEloh9bs", oauth_signature="*********", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1359082177", oauth_version="1.0" 

注:私は私のキーを保護し、私の秘密のリバースエンジニアリングの可能性を除去する明白な理由のために*********oauth_consumer_keyoauth_signature値を交換しました。

関連する問題