OAuth:HTTP 401尝试获取访问令牌时的状态

时间:2012-03-27 20:51:58

标签: java oauth linkedin linkedin-j

使用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

有什么不对?

1 个答案:

答案 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 ...)而我发现的问题并没有相同的原因我见过。