2012-03-27 92 views
2

使用linkedin-j時HTTP 401個狀態,我在我的應用程序的一部分下面的代碼的OAuth:試圖獲得訪問令牌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的NullPointerException ...),我發現的問題並沒有像我見過的一樣的原因。

+1

+1。我有類似的問題,你的工作指向了正確的方向。就我而言,我使用的是WebAPI,所以我沒有使用會話,而是使用cookie,並在讀取數據時無意中將密鑰/值顛倒過來。感謝分享! – 2013-01-25 14:40:17

+0

我在線程中的異常「main」com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceException:oauth.signpost.exception.OAuthCommunicationException中發生錯誤:與服務提供者的通信失敗:服務器返回的HTTP響應代碼:URL for URL 401 :https:// api.linkedin.com/uas/oauth/requestToken'我該如何解決這個問題? – muthu 2013-05-10 06:18:50

+0

謝謝你對你自己的問題的迴應! 我正在使用Liferay,並在我的MVCPortlet類中聲明瞭一個保留令牌的私有字段。 – 2013-06-19 13:28:08