OAuth: HTTP 401 Status при попытке получить токен доступа к LinkedIn - PullRequest
2 голосов
/ 28 марта 2012

Используя 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 для URL: https://api.linkedin.com/uas/oauth/accessToken

Вызвано: oauth.signpost.exception.OAuthCommunicationException: сбой связи с поставщиком услуг: сервер вернул код ответа HTTP: 401 для URL: https://api.linkedin.com/uas/oauth/accessToken

Что может быть не так?

1 Ответ

5 голосов
/ 28 марта 2012

Оказывается, проблема в том, что мне нужно использовать один и тот же объект 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);

Примечание. Размещение вопроса иответ, потому что я искал много, и никто не нашел эту конкретную проблему.Делая это в духе этот вопрос на Мета .Кроме того, я не ответил на некоторые старые вопросы, потому что эта ошибка может произойти по множеству причин (это как NullPointerException для LinkedIn API ...), и вопросы, которые я нашел, не имели тех же причин, насколько явидел.

...