Как получить access_token Exact Online API с помощью apache OAuth 2.0

Мы пытаемся использовать 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();
        }
    }

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

1 ответ

Решение

Наконец я решил эту проблему с помощью простого изменения. Проблема с линией

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

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

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

(Или же)

OAuthAccessTokenResponse oAuthResponse =oAuthClient.accessToken(oAuthrequest,OAuth.HttpMethod.POST);
Другие вопросы по тегам