使用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响应代码:401为网址:https://api.linkedin.com/uas/oauth/accessToken
引起:oauth.signpost.exception.OAuthCommunicationException:与服务提供商的通信失败:服务器返回HTTP响应代码:401为URL:https://api.linkedin.com/uas/oauth/accessToken
有什么不对?
答案 0 :(得分: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
...)而我发现的问题并没有相同的原因我见过。