2

使用linkedin-j,我的应用程序的一部分中有以下代码

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:与服务提供商通信失败:服务器返回 HTTP 响应代码:URL 401:https ://api.linkedin.com/uas /oauth/accessToken

原因:oauth.signpost.exception.OAuthCommunicationException:与服务提供商的通信失败:服务器返回 HTTP 响应代码:401 用于 URL:https ://api.linkedin.com/uas/oauth/accessToken

有什么问题?

4

1 回答 1

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);

注意:发布问题和答案是因为我搜索了很多,但没有人发现这个特定问题。本着Meta 上的这个问题的精神来做这件事。另外,我没有回答一些老问题,因为发生此错误的原因有很多(就像NullPointerExceptionLinkedIn API ...),而且我发现的问题与我所见的原因不同。

于 2012-03-27T20:58:34.253 回答