Ошибка Google API API и учетной записи службы - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь интегрировать API Календаря Google в свое приложение. Пока мне удалось это сделать:

  • Создан новый проект на облачной платформе
  • Включен API календаря
  • Добавлена ​​новая учетная запись службы с ролью: Владелец
  • Сгенерировано jwt. json
  • Предоставлено для всего домена для этой учетной записи службы
  • Общий календарь с этой учетной записью службы (права на изменение)
  • Включено в GSuite есть возможность изменять события для всех вне организации

Теперь мой код на node.js выглядит следующим образом:

const { JWT } = require('google-auth-library');

const client = new JWT(
    keys.client_email,
    null,
    keys.private_key,
    ['https://www.googleapis.com/auth/calendar']
);

const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`;
const rest = await client.request({url});
console.log(rest);

Полученная ошибка:

Отправка ответа 500 («Ошибка сервера»): Ошибка: недостаточно прав

У кого-нибудь есть идеи? Это расстраивает.

1 Ответ

1 голос
/ 23 марта 2020

Как насчет этой модификации?

Я думаю, что в вашем скрипте конечная точка и / или область действия могут быть неверными.

Шаблон 1:

В этом шаблоне , ваша конечная точка https://dns.googleapis.com/dns/v1/projects/${keys.project_id} используется.

Модифицированный скрипт:

const { JWT } = require("google-auth-library");
const keys = require("###");  // Please set the filename of credential file of the service account.

async function main() {
  const calendarId = "ip15lduoirvpitbgc4ppm777ag@group.calendar.google.com";
  const client = new JWT(keys.client_email, null, keys.private_key, [
    'https://www.googleapis.com/auth/cloud-platform'  // <--- Modified
  ]);
  const url = `https://dns.googleapis.com/dns/v1/projects/${keys.project_id}`;
  const res = await client.request({ url });
  console.log(res.data);
}

main().catch(console.error);
  • В этом случае необходимо включить Cloud DNS API на консоли API. И это необходимо для оплаты. Пожалуйста, будьте осторожны с этим.
    • Я думал, что причиной вашего сообщения об ошибке Insufficient Permission может быть следующее.

Pattern 2:

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

Модифицированный скрипт:

const { JWT } = require("google-auth-library");
const keys = require("###");  // Please set the filename of credential file of the service account.

async function main() {
  const calendarId = "###";  // Please set the calendar ID.

  const client = new JWT(keys.client_email, null, keys.private_key, [
    "https://www.googleapis.com/auth/calendar"
  ]);
  const url = `https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events`;  // <--- Modified
  const res = await client.request({ url });
  console.log(res.data);
}

main().catch(console.error);

Примечание:

  • Этот модифицированный скрипт предполагает, что вы используя google-auth-library-nodejs последней версии.

Ссылка:

Если я неправильно понял ваш вопрос, и это не то направление, в котором вы хотите, прошу прощения.

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