Почему мои вызовы API с помощью google-api-nodejs-client в Google Analytics не работают в рабочей среде? - PullRequest
0 голосов
/ 27 декабря 2018

Я звоню в API отчетов Google Analytics , используя google-api-nodejs-client , чтобы показать количество посещений в блоге.

Этот блогнаходится в стандартной среде Google App Engine.

В процессе разработки я аутентифицирую свои вызовы API с помощью учетных данных приложения по умолчанию .Я скачал файл JSON с учетными данными из службы учетных записей, которую создал исключительно для аналитических целей, установил для файла переменную среды Google_Application_Credentials, и все заработало.Я могу получить данные из Google Analytics и отобразить их на веб-сайте.

Но это не работает на производстве.Я полагаю, getClient() не получает учетные данные в этой среде.

Важно отметить: 1) Я не загружал загруженный файл JSON с учетными данными из учетной записи службы (я думаю, что это противоречит интуиции иэто небезопасно, и, как я понял из документации, GCP может автоматически обрабатывать аутентификации API);


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

async function main () {

    // This method looks for the GCLOUD_PROJECT and GOOGLE_APPLICATION_CREDENTIALS
    // environment variables.
    const auth = await google.auth.getClient({
        // Scope of the analytics reporting,
        // with only reading access.
        scopes: 'https://www.googleapis.com/auth/analytics.readonly',
    });

    // Create the analytics reporting object
    const analyticsreporting = await google.analyticsreporting({
        version: 'v4',
        auth: auth,
    });

    // Fetch the analytics reporting
    const res = await analyticsreporting.reports.batchGet({...});
    return res.data;
}

У меня уже нет вариантов.Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 01 февраля 2019

Это проблема с областями по умолчанию и учетными данными приложения по умолчанию.По умолчанию, если вы не создаете новую учетную запись службы, вы получите «учетные данные приложения по умолчанию» из службы метаданных GCE: https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-nodejs

Эти учетные данные обычно имеют только область действия cloud-platform,и набор областей не может быть изменен (на сегодняшний день).Чтобы это работало, у вас есть несколько вариантов.

  1. Вы можете создать новую учетную запись службы, загрузить ключ учетной записи службы и использовать свойство keyFile в методе getClient.варианты ссылки на ключ.Если вы сделаете это таким образом, области, которые вы передадите в getClient, будут соблюдены.

  2. Вы можете играть с областями, доступными для учетной записи службы, под которой работает ваше приложение GAE.Я лично не пробовал это, но теоретически это должно быть возможно.

Удачи!

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