Проблемы при получении токена доступа Google oAuth2 - перенаправление Uri Mismatch - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь получить контакты Google для пользователя через механизм oAuth2. Я следую этому уроку - https://developers.google.com/identity/sign-in/web/server-side-flow

У меня есть код JavaScript, который вызывает start () при загрузке страницы -

function start() {
  gapi.load('auth2', function() {
    auth2 = gapi.auth2.init({
      client_id: 'SOME_CLEINT_ID',
      scope: 'https://www.googleapis.com/auth/contacts.readonly'
    });
  });
}

и

auth2.grantOfflineAccess().then(signInCallback);

, а затем -

function signInCallback(authResult) {
    if (authResult['code']) {
        var callback = function(data){
            data = JSON.parse(data);
            console.log(data);
        };
        callAjax({action: 'saveGmailAuth', gaccesscode: authResult['code']}, callback, true);
    } else {
        // There was an error.
    }
}

Этот интерфейсный код вызывает мой серверный веб-сервлет Java, который пытается получить токен доступа -

String authCode = request.getParameter("gaccesscode");
        String REDIRECT_URI = "";
        String CLIENT_SECRET_FILE = "G:/eclipse_proj/GoogleContacts/CLIENT_JSON_FILE.json";
        GoogleClientSecrets clientSecrets;
        try {
            clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(),
                    new FileReader(CLIENT_SECRET_FILE));
            REDIRECT_URI = clientSecrets.getDetails().getRedirectUris().get(0);
            GoogleAuthorizationCodeTokenRequest tokenRequest = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(),
                    JacksonFactory.getDefaultInstance(), "https://www.googleapis.com/oauth2/v3/token",
                    clientSecrets.getDetails().getClientId(), clientSecrets.getDetails().getClientSecret(), authCode,
                    REDIRECT_URI);
            GoogleTokenResponse tokenResponse = tokenRequest.execute();
            String accessToken = tokenResponse.getAccessToken();
            GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Каждый раз, когда я пробую этот Java-код, каждый раз, когда он выдает ошибку в tokenRequest.execute() -

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "redirect_uri_mismatch",
  "error_description" : "Bad Request"
}

С REDIRECT_URI в качестве пустой строки выдается еще одна ошибка: redirect_uri_not_provided.

Я пробовал и с "https://www.googleapis.com/oauth2/v3/token", и с "https://www.googleapis.com/oauth2/v4/token"

Мне нужна помощь, чтобы выяснить это. Что я тут не так делаю?

Мой URI перенаправления - http://localhost:8080/GoogleContacts/Callback в файле json и в консоли разработчика для oauth2.

1 Ответ

0 голосов
/ 04 мая 2018

Чтобы использовать redirect_uri при использовании API Google, перейдите в консоль разработчика Google и введите то, что вы видите как:

//you can use any port you want
http:localhost:8080/oauth2callback

oauth2callback является ключевым ингредиентом.

...