2012-03-27 18 views
2

にアクセストークンを取得しようとしたときにHTTP 401のステータス、私は自分のアプリケーションのOAuth:<a href="http://code.google.com/p/linkedin-j/" rel="nofollow">linkedin-j</a>を使用してLinkedInの

LinkedInOAuthService service = LinkedInOAuthServiceFactory.getInstance() 
     .createLinkedInOAuthService(consumerKey, consumerSecret); 
LinkedInRequestToken requestToken = 
        service.getOAuthRequestToken(linkedinCallbackURL); 
String authUrl = requestToken.getAuthorizationUrl(); 

の一部に、私はauthUrlによって指さページにリダイレクトし、正しいを取得するには、次のコードを持っていますLinkedInのページで私のアプリケーションを認証します。その後、linkedinCallbackURLが指し示すページが、この実行されます生成するコード:残念ながら

String verifier = request.getParameter("oauth_verifier"); 
LinkedInOAuthService oauthService = 
    LinkedInOAuthServiceFactory.getInstance() 
        .createLinkedInOAuthService(consumerKey, consumerSecret); 

LinkedInRequestToken requestToken = oauthService.getOAuthRequestToken(); 
LinkedInAccessToken accessToken = oauthService 
      .getOAuthAccessToken(requestToken, verifier); 

は、私はこのエラーを取得する:

com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceException: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Server returned HTTP response code: 401 for URL: https://api.linkedin.com/uas/oauth/accessToken

Caused by: oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: Server returned HTTP response code: 401 for URL: https://api.linkedin.com/uas/oauth/accessToken

間違っている可能性がありますか?

答えて

5

私は両方の点で同じLinkedInRequestTokenオブジェクトを使用する必要があるということが判明しました。これを行うには、私が最初の部分でのセッションでそれを保存:

LinkedInRequestToken requestToken = 
      service.getOAuthRequestToken(linkedinCallbackURL); 
session.setAttribute("requestToken", requestToken); // <== THE BEEF 
String authUrl = requestToken.getAuthorizationUrl(); 

は、その後、私はセッションからそれを取り出した:

LinkedInOAuthService oauthService = LinkedInOAuthServiceFactory.getInstance() 
     .createLinkedInOAuthService(consumerKey, consumerSecret); 
// LinkedInRequestToken requestToken = oauthService.getOAuthRequestToken(); 
LinkedInRequestToken requestToken = 
     (LinkedInRequestToken) session.getAttribute("requestToken") 
LinkedInAccessToken accessToken = oauthService 
    .getOAuthAccessToken(requestToken, verifier); 

注:私はそれを検索するので、質問や回答を投稿多くの人がこの特定の問題を発見しました。それはthis question on Metaの精神でそれをしています。また、このエラーは無数の理由(LinkedIn APIの場合はNullPointerExceptionのようなものです)で発生する可能性がありますので、私はいくつかの古い質問には答えませんでした。私が見つけた質問には私が見た限り同じ原因はありませんでした。

+1

+1。私も同様の問題を抱えており、あなたの仕事は正しい方向に私を指差していました。私の場合、私はWebAPIを使用しているので、セッションを使わずに代わりにクッキーを使い、データを読み返す際に秘密/価値を誤って逆転させました。共有ありがとう! –

+0

「スレッドの例外」メインでエラーが発生しました。com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceException:oauth.signpost.exception.OAuthCommunicationException:サービスプロバイダとの通信に失敗しました:サーバーからHTTPレスポンスコード:401が返されました:https:// api.linkedin.com/uas/oauth/requestToken'これをどのように解決すればよいですか? – muthu

+0

あなた自身の問題であなたの応答をありがとう! 私はLiferayを使用していて、私のMVCPortletクラスの中で私はトークンを保持するプライベートフィールドを宣言しました。 –

関連する問題

 関連する問題