Ошибка авторизации аккаунта службы Google - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь использовать Google API с учетной записью службы. Первоначально я использовал обычную учетную запись проекта с учетными данными, и мне удалось запросить API. Чтобы использовать учетную запись службы, я изменил код, чтобы пропустить поток проверки подлинности браузера и использовать только учетные данные учетной записи службы. Похоже, тот же запрос, который использовался для работы с обычными учетными данными проекта, теперь выдает ошибку, не разъясняя многое в сообщении. Это выглядит следующим образом:

directoryService = new GoogleService().buildDirectoryService();

Users result = directoryService.users().list()
        .setCustomer("my_customer")
        .setOrderBy("email")
        .execute();

public Directory buildDirectoryService() throws GeneralSecurityException, IOException {
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

        GoogleCredential credential = GoogleCredential
                .fromStream(new FileInputStream("src/main/resources/newest_service_account_creds.json"))
                .createScoped(SCOPES);

        return new Directory.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .setHttpRequestInitializer(credential).build();
    }

К сожалению, в сообщении об ошибке ничего не говорится:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid Input",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Input"
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1108)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at GetDrivePermissions.getFiles(GetDrivePermissions.java:35)
at Main.main(Main.java:7)

Я повторил процесс два раза, чтобы убедиться, что ничего не пропустил, включая создание новый проект, включающий API, добавление учетной записи службы, добавление и включение делегирования по всему домену и получение файла учетных данных json, а также добавление доступа к приложению в App Access Control в интерфейсе администратора. Но вызов службы

directoryService.users().list().setCustomer("my_customer").setOrderBy("email").execute();

по-прежнему возвращает указанное выше сообщение об ошибке.

Сообщение об ошибке относится к «Неверный ввод», но запрос раньше работал с обычными учетными данными приложения. Поэтому проблема должна заключаться не в том, как я вызываю службу каталогов, а в моей аутентификации, единственное различие между рабочей и нерабочей версией.

Поскольку это работало с использованием учетных данных проекта, должно быть что-то неправильно с тем, как я использую учетную запись службы, но я не могу найти ошибку даже после повторения всего процесса два раза. Исходя из руководств, которые я нашел о служебных учетных записях, это должно работать. Объект учетных данных создан, и он выглядит правильно.

Что я могу посмотреть дальше?

Спасибо за любое понимание заранее.

1 Ответ

0 голосов
/ 10 апреля 2020

Я изменил эту часть обратно, чтобы использовать собственные учетные данные приложения. У меня есть другой вызов, который использует учетные данные учетной записи службы и работает, так что пока это обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...