2015-07-27 4 views
1

Мы пытаемся использовать Exact Online API. Он использует инфраструктуру Apache OAuth 2.0. Для этого мы выполнили нижеследующий документ.Как получить access_token из Exact Online API с помощью apache OAuth 2.0

https://developers.exactonline.com/#OAuth_Tutorial.html%3FTocPath%3DAuthentication%7C_____2

я успешно смог получить код авторизации, но не в состоянии получить access_token с исключением, как показано ниже.

OAuthProblemException{error='invalid_request', description='Missing parameters: access_token', uri='null', state='null', scope='null', redirectUri='null', responseStatus=0, parameters={}} 

Мой код такой.

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     try { 
      OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request); 
      String code = oar.getCode(); 
      OAuthClientRequest oAuthrequest = OAuthClientRequest 
        .tokenLocation("https://start.exactonline.co.uk/api/oauth2/token") 
        .setGrantType(GrantType.AUTHORIZATION_CODE) 
        .setClientId("my client id") 
        .setClientSecret("my client secret") 
        .setRedirectURI("http://localhost:8080/SampleServlet/AuthServlet") 
        .setCode(code) 
        .buildBodyMessage(); 
      OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); 
      GitHubTokenResponse oAuthResponse = oAuthClient.accessToken(oAuthrequest, "POST",GitHubTokenResponse.class); 
      out.println("Access Token = " + oAuthResponse.getAccessToken()); 
     } catch (OAuthSystemException ex) { 
      Logger.getLogger(AuthServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (OAuthProblemException ex) { 
      Logger.getLogger(AuthServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } finally { 
      out.close(); 
     } 
    } 

Может кто-нибудь, пожалуйста, помогите мне разобраться.

+0

Redirect URI не может быть локальный я думаю. – Roshith

+0

Переназначение URI - это не что иное, как обработчик ответа обратного вызова из веб-службы Exact. Здесь в моем случае это не что иное, как сервлет, который работает на одной машине. – Purna

ответ

2

И наконец, я решил эту проблему с простым изменением. Проблема связана с линией

GitHubTokenResponse oAuthResponse = oAuthClient.accessToken(oAuthrequest, "POST",GitHubTokenResponse.class); 

Вместо этого мы должны использовать любую из нижеследующих линий для правильного доступа к токену доступа.

OAuthJSONAccessTokenResponse oAuthResponse = oAuthClient.accessToken(oAuthrequest, OAuth.HttpMethod.POST); 

(или)

OAuthAccessTokenResponse oAuthResponse =oAuthClient.accessToken(oAuthrequest,OAuth.HttpMethod.POST); 
+0

Не могли бы вы направить https://stackoverflow.com/questions/47001135/apache-oltu-instragram-integration-doesnt-return-access-token-why? – Prateek