400 неверных запросов при обновлении токена через Gmail Java API - PullRequest
0 голосов
/ 27 января 2020

Здравствуйте, я пытаюсь реализовать отправку / получение электронной почты, используя gmail api Google на моем сервере:

private GoogleCredential authorize(HttpTransport httpTransport, JsonFactory jsonFactory ) {
   try{
       Resource resource = new ClassPathResource("my_key_in_json_format.");
       InputStream input = resource.getInputStream();
       GoogleCredential credential = GoogleCredential.fromStream(input);
       credential.createScoped(GmailScopes.all());
       credential.refreshToken();
       return credential;
    }catch(IOException  e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}

Но я получаю следующее исключение, когда учетные данные пытаются обновить токен sh:

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "invalid_scope",
  "error_description" : "Bad Request"
}
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:394)
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:493)
    at com.snobo.util.GmailService.authorize(GmailService.java:79)

Я попытался изменить параметры области действия на:

Collection<String> SCOPES = Collections.unmodifiableCollection(Arrays.asList(new String[]{GmailScopes.GMAIL_READONLY}));

И при обновлении токена произошла ошибка. Онлайн-документ Google на самом деле не Java дружественный. Кто-нибудь сталкивался с подобными проблемами?

1 Ответ

1 голос
/ 29 января 2020

Я нашел ответ на свою проблему, основываясь на этой теме после поиска:

400 Плохой запрос на API Gmail с php

"Вы не должны использовать служебную учетную запись, если вы просто хотите получить доступ к одной учетной записи (своей). Служебные учетные записи являются их собственной учетной записью, а не учетными записями Gmail. Они хорошо работают для API, которые не требуют пользователя (например, карты, поиск) или когда вы используете домен Google Apps для работы и хотите, чтобы делегирование было включено для всех пользователей в домене (администратором домена, поэтому вам не нужна индивидуальная авторизация пользователя). "

Я изменил свою реализацию на используйте oauth web flow сейчас. Я действительно разочарован в документации Google, поскольку этот вопрос должен быть решен прямо и максимально кратко. Я уверен, что «служебная учетная запись» и «делегирование по всему домену» ошибочно заставили многих разработчиков использовать подход служебной учетной записи для многих типов приложений для личных / индивидуальных учетных записей.

...