Используйте учетную запись службы Google с клиентом Google API JavaScript - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел узнать, возможно ли использовать учетную запись службы для запроса данных из любого API Google, но используя эту библиотеку: https://github.com/google/google-api-javascript-client

Мне удалось выяснить, как использовать библиотеку с учетными данными OAuth2.0 из облачной консоли Google. Но моя настоящая потребность требует, чтобы я использовал служебную учетную запись для извлечения этих данных.

Вот код, который я использовал для извлечения данных из учетных данных OAuth2.0:

initClient() {
      return gapi.client.init({
        apiKey: this.GSC_API_KEY, // already defined in the application
        client_id:
          "xxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
        scope:
          "https://www.googleapis.com/auth/webmasters https://www.googleapis.com/auth/webmasters.readonly",
        discoveryDocs: [
          "https://www.googleapis.com/discovery/v1/apis/webmasters/v3/rest"
        ]
      });
    },

   gapiList() {
      this.initClient()
        .then(() => {
          // Executes an API request, and returns a Promise.
          // The method name `webmasters.sites.list` comes from the API webmasters.
          return gapi.client.webmasters.sites.list();
        })
        .then(
          response => {
            console.log(response.body);
          },
          err => {
            console.error(err.details);
          }
        );
    },

Вот код, который запрашивает API:

gapi.load("client", this.gapiList);

Он возвращает мне хорошие данные.

Но моя конечная цель требует, чтобы я использовал служебную учетную запись.

Функция initClient действительно требует client_id загрузить правильно. Если я даю client_id учетной записи службы, она возвращает мне ошибку.

"Not a valid origin for the client: http://localhost:8080/ has not been whitelisted for client ID xxxxxxxxxxxxx. Please go to https://console.developers.google.com/ and whitelist this origin for your project's client ID.

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

Надеюсь, я предоставил достаточно информации.

Спасибо за любой ответ и помощь.

1 Ответ

0 голосов
/ 26 февраля 2020

Как говорится в сообщении, вам нужно разрешить localhost: 8080 в качестве origin вызывать API. Чтобы защитить вас и ваших пользователей, Google ограничивает ваше приложение OAuth 2.0 использованием авторизованных доменов. Если вы проверили домен в Google, вы можете использовать любой Топ Частный домен в качестве Авторизованного домена.

После добавления Авторизованного домена вы можете использовать любой из его поддоменов или страниц, а также любые другие связанные коды стран. , Добавьте свои авторизованные домены перед добавлением URI-адресов перенаправления или источника, URL-адреса своей домашней страницы, URL-адреса условий предоставления услуг или URL-адреса своей политики конфиденциальности.

Для выполнения sh этого выполните this шаги:

  1. В консоли GCP нажмите APIs и службы, а затем экран согласия OAuth. Возможно, вам придется сначала нажать Меню меню.
  2. В поле Имя приложения введите G Suite Migrate и нажать Сохранить.
  3. В левом меню нажмите Учетные данные.
  4. Нажмите Создайте учетные данные, а затем идентификатор клиента OAuth.
  5. Выберите веб-приложение.
  6. В поле Имя введите имя веб-клиента OAuth.
  7. В поле Авторизованный JavaScript В поле происхождение введите URL-адрес, который вы будете использовать для доступа к платформе G Suite Migrate (например, http://localhost: 5131 ).
  8. Нажмите Создать.
  9. Запишите идентификатор клиента, указанный в поле «Идентификатор клиента». Он понадобится вам при настройке платформы G Suite Migrate. Совет: Вы также можете получить доступ к идентификатору клиента из API и Сервиса, а затем из Credentials.
  10. Нажмите OK.

Примечание. Для завершения процесса авторизации может потребоваться некоторое время.

Дополнительно: если вы хотите, чтобы учетная запись службы могла вызывать API от имени пользователя, вам также потребуется делегировать полномочия в рамках всего домена для учетной записи службы. Это подробно объясняется здесь .

...