LinkedIn APIをテストし、LinkedInのOAuthプロバイダーに対して認証するためにMeteor JSスマートパッケージを構築しようとしたとき、私は完全な障害に遭遇しました。
これらの指示に従う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を使用して、トークンをクエリ文字列パラメータとしてブラウザに簡単にダンプし、LinkedInの権限ダイアログを表示できます。
有効なトークンで表示されるLinkedIn認証ウィンドウ:
残念ながら、コマンドラインでcurlリクエストを書き込もうとするとoauth_token
、同じURLで使用すると、生成されたリクエストは失敗します。実際、LinkedInは500エラーで応答し、ブラウザは標準の500エラーウィンドウを表示します。応答には追加の詳細は含まれていません。
これは、新しいリンクインへのcurlリクエストで実装したものと同様のコードですoauth_token
:
alex@alex-mac 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のOAuthテストコンソールを使用してAuthorizationヘッダーを生成したことは注目に値します。
Meteor JSスマートパッケージ内に同様の機能を実装しようとすると同じ問題が発生するため、これは重要です。
しかし、私の主な質問は、なぜ世界で上記のルビーコードでそれを行うことができるのかということですが、単純なcurlシェルコマンドを使用すると、トークンが有効に生成されていないようです(またはLinkedInは単にそれを尊重したくない) ..。。