Олицетворять, используя json файл учетных данных - PullRequest
0 голосов
/ 28 апреля 2020

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

Мой код:

                List<String> scopes = new ArrayList<>();
                scopes.add(CalendarScopes.CALENDAR);
                scopes.add(CalendarScopes.CALENDAR_EVENTS);


                InputStream credentialsJSON = Service5.class.getClassLoader()
                        .getResourceAsStream("credentials.json");

                GoogleCredential gcFromJson = GoogleCredential.fromStream(credentialsJSON, HTTP_TRANSPORT, JSON_FACTORY).createScoped(scopes);

                GoogleCredential cred =  new GoogleCredential.Builder()
                        .setTransport(gcFromJson.getTransport())
                        .setJsonFactory(gcFromJson.getJsonFactory())
                        .setServiceAccountId(gcFromJson.getServiceAccountId())
                        .setServiceAccountUser("edt@company.tn")
                        .setServiceAccountPrivateKey(gcFromJson.getServiceAccountPrivateKey())
                        .setServiceAccountScopes(gcFromJson.getServiceAccountScopes())
                        .build();
                Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, cred).setApplicationName(APPLICATION_NAME).build();


                Event event = new Event().setSummary("Test");

                DateTime startDateTime = new DateTime("2020-04-27T09:00:00.000Z");
                EventDateTime start = new EventDateTime()
                                      .setDateTime(startDateTime)
                                      .setTimeZone("Africa/Tunis");
                event.setStart(start);

                DateTime endDateTime = new DateTime("2020-04-27T10:30:00.000Z");
                EventDateTime end = new EventDateTime()
                                    .setDateTime(endDateTime)
                                    .setTimeZone("Africa/Tunis");
                event.setEnd(end);

                List<EventAttendee> attendees = new ArrayList<EventAttendee>();
                EventAttendee ens = new EventAttendee().setEmail("user@company.tn");
                attendees.add(ens);
                event.setAttendees(attendees);

                String calendarId = "primary";
                event = service.events().insert(calendarId, event).execute();

Но я получил это исключение:

enter image description here

РЕДАКТИРОВАТЬ - 1 Я скачал файл json, полученный в результате CREATE KEY

Получил это исключение:

Исключение в потоке "main" com.google.api.client.auth.oauth2.TokenResponseException: 401 Не авторизовано на com.google.api.client.auth.oauth2.TokenResponseException.from (TokenResponseException. java: 105) на com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed (TokenRequest. java: 287) на com.google.api.client.auth.oauth2.TokenRequest.execute (TokenRequest. java: 307) на com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken (GoogleCredential. java: 394) на com.google.api.client.auth.oauth2.Credential.refreshToken (учетные данные. * 1032) *: 493) на странице com.google.api.client.auth.oauth2.Credential.intercept (Credential. java: 217) на странице com.google.api.client.http. HttpRequest.execute (HttpRequest. java: 880) на com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed (AbstractGoogleClientRequest. java: 419) на com.google.api.client.g AbstractGoogleClientRequest.executeUnparsed (AbstractGoogleClientRequest. java: 352) на com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute (AbstractGoogleClientRequest. java: 469) в tner.google.png. main (Service5. java: 183)

Подскажите, пожалуйста, что я пропустил?.

Спасибо большое

1 Ответ

1 голос
/ 28 апреля 2020

Чтобы использовать учетную запись службы, необходимо создать учетные данные выделенных учетных записей службы

  • Go для консоли GCP
  • Выбрать проект
  • Go on APIs & Services -> Credentials
  • Выберите + CREATE CREDENTIALS -> Service Account
  • Выберите Service account name и нажмите Create
  • При желании вы можете выбрать роль (необязательно)
  • Нажмите Create key и выберите JSON (p12 также возможно, но вам нужно будет построить GoogleCredential по-другому
  • Файл правильный json будет загружен на ваш компьютер

Он будет выглядеть следующим образом:

{
"type": "service_account",
...

Файл json Вы использовали неправильный аккаунт для служебных учетных записей, в нем не было указано поле type - таким образом, ошибка 'type' field not specified.

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