API GSuite Alert Center возвращает "идентификатор клиента не может быть выведен из запроса или идентификатора вызывающего абонента". ошибка

Я пытаюсь получить список предупреждений из API центра предупреждений GSuite в приложении Node JS. Я создал учетную запись службы на странице IAM и администратора, проверил Enable G Suite Domain-wide Delegationфлажок и сгенерировал файл JSON с установленными ключами доступа. Затем я пошел в Admin Console -> Security -> API controls -> Domain-wide Delegation и зарегистрировал Учетную запись службы по ее идентификатору клиента с https://www.googleapis.com/auth/apps.alerts объем.

Код был взят из примера, представленного в google-api-nodejs-client, и в основном выглядит так:

const { google } = require('googleapis');
const alertcenter = google.alertcenter('v1beta1');

const auth = new google.auth.GoogleAuth({
   keyFile: 'Path/to/my/file/with/accessKeys'
   scopes: ['https://www.googleapis.com/auth/apps.alerts'],
});
const client = await auth.getClient();
google.options({auth: client});

const res = await alertcenter.alerts.list();

Что я получаю от API, так это "идентификатор клиента не может быть выведен из запроса или идентификатора вызывающего абонента". сообщение об ошибке.

Я попытался передать идентификатор клиента в качестве параметра методу list(), поскольку он описан как его допустимый параметр. Как это

const res = await alertcenter.alerts.list({ customerId: 'my-customer-id' });

В результате я получил только еще одно сообщение об ошибке: Запрос содержит недопустимый аргумент.

Что я делаю не так?

1 ответ

Эй, у меня была такая же проблема, и это сводило меня с ума.

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

Это требуется в параметре «субъект» учетных данных авторизации.

Я не мог сделать это с помощью объекта GoogleAuth, поскольку он не работает, но с помощью JWT, который аналогичен

Я следил за своим носом по проблеме с питоном, которая была у людей здесь https://github.com/googleapis/google-api-python-client/issues/777 .

      const {google} = require('googleapis');

const scopes = ['https://www.googleapis.com/auth/apps.alerts'];
const credentials = require("Path/to/my/file/with/accessKeys");

// email with access to alert center
const auth_email = 'someemail@domain.com';

async function runSample() {
    const authClient = new google.auth.JWT({
        email:credentials.client_email,
        key: credentials.private_key,
        scopes: scopes,
        subject: auth_email 
    });

    authClient.authorize(function(err, tokens) {
        if (err) {
            console.log(err);
            return;
        } else {
            authClient.setCredentials(tokens);
        }
    });

    google.options({
        auth: authClient
    });

    const alertcenter = google.alertcenter('v1beta1');

    const res = await alertcenter.alerts.list();

    console.log(res.data);

    return res.data;
}

if (module === require.main) {
    runSample().catch(console.error);
  }
  
  // Exports for unit testing purposes
  module.exports = {runSample};

Это работает для меня сейчас - может быть другой способ назначить тему / адрес электронной почты для авторизации с помощью GoogleAuth но я не могу понять это.

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