API общих контактов домена Google, использующий OAuth 2.0 для серверных приложений - параметры учетных данных

Я пытаюсь получить "API общих контактов домена Google", описанный здесь: https://developers.google.com/admin-sdk/domain-shared-contacts/

Работа с использованием "OAuth 2.0 для серверных приложений" описана здесь: https://developers.google.com/accounts/docs/OAuth2ServiceAccount

На странице OAuth рекомендуется использовать предоставленную клиентскую библиотеку Google... Я использую библиотеку Java. Но у API Shared-Contacts нет примера, который использует эту библиотеку, и у меня возникают проблемы с выяснением, как использовать библиотеку с API Shared-Contacts.

Я могу сделать пример, чтобы OAuth работал для меня... Он использует Google Cloud Storage. Вот фрагмент кода:

String STORAGE_SCOPE = "https://www.googleapis.com/auth/devstorage.read_write";
try {
          try {
      httpTransport = GoogleNetHttpTransport.newTrustedTransport();
      String p12Content = Files.readFirstLine(new File(keyFile), Charset.defaultCharset());
      // Build service account credential.
      GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
          .setJsonFactory(JSON_FACTORY)
          .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
          .setServiceAccountScopes(Collections.singleton(STORAGE_SCOPE))
          .setServiceAccountPrivateKeyFromP12File(new File(keyFile))
          .build();

      // Set up and execute Google Cloud Storage request.
      String URI;

      URI = "https://storage.googleapis.com/" + BUCKET_NAME;
      HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential);
      GenericUrl url = new GenericUrl(URI);
      HttpRequest request = requestFactory.buildGetRequest(url);
      HttpResponse response = request.execute();
      content = response.parseAsString();
          } catch (IOException e) {
              System.err.println(e.getMessage());
            }
          } catch (Throwable t) {
            t.printStackTrace();
          }   
      return content;

Это запрос на получение списка того, что находится в определенном сегменте в GCS. Он вызывает конкретный URL-адрес, используя объект Credentials, где объект Credentials выполняет работу OAuth, используя загруженный мной файл ключа. Есть другие шаги, необходимые для того, чтобы заставить его работать (настройка электронной почты учетной записи службы и т. Д.), Что я и сделал. Он возвращает строку XML, содержащую то, что находится внутри корзины, и это прекрасно работает для меня.

Затем я попытался изменить URI на эту строку: URI = " https://www.google.com/m8/feeds/contacts/myGoogleAppsDomain.com/full"; и я изменил переменную STORAGE_SCOPE на эту строку: STORAGE_SCOPE = " http://www.google.com/m8/feeds/";

Надеясь, что это вернет xml-строку общих контактов. Но вместо этого он возвращает эту ошибку: 403 Не удается запросить контакты, принадлежащие другому домену

Я полагаю, что получаю эту ошибку, потому что я не указываю параметр "hd" при выполнении запроса аутентификации... Однако я не уверен, как я могу указать параметр "hd", используя объект GoogleCredential (или другие параметры, кроме "объема")... Может кто-нибудь мне помочь с этим?

1 ответ

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

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

https://developers.google.com/doubleclick-publishers/docs/service_accounts

Другие вопросы по тегам