Проблемы с подключением учетной записи службы к Admob API с помощью Google-Auth-Library - PullRequest
0 голосов
/ 26 февраля 2020

Я пытался подключиться к Admob API из AWS Lambda, чтобы время от времени автоматически извлекать некоторые значения из отчетов. Я успешно получил google-auth-library- nodejs для слоя и пытаюсь использовать его для подключения к Admob API.

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

Это код, который я добавил в свою лямбду:

const {GoogleAuth} = require('google-auth-library');    
exports.handler = (event, context, callback) => {

    async function main() {
      const auth = new GoogleAuth({
        scopes: ['https://www.googleapis.com/auth/admob.report'],
      });

      const client = await auth.getClient();

      //console.log("client", JSON.stringify(client));

      const url = `https://admob.googleapis.com/v1/accounts`;
      const res = await client.request({ url });
      console.log("res: ", JSON.stringify(res.data));
    }

    main().catch(console.error);
};

Когда я запускаю код, я получаю следующую ошибку:

ERROR   GaxiosError: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
    at Gaxios._request (/opt/nodejs/node_modules/gaxios/build/src/gaxios.js:85:23)
    at processTicksAndRejections (internal/process/task_queues.js:94:5)
    at async JWT.requestAsync (/opt/nodejs/node_modules/google-auth-library/build/src/auth/oauth2client.js:350:18)
    at async main (/var/task/index.js:97:19) {
  response: {
    config: {
      url: 'https://admob.googleapis.com/v1/accounts',
      headers: [Object],
      params: [Object: null prototype] {},
      paramsSerializer: [Function: paramsSerializer],
      validateStatus: [Function: validateStatus],
      responseType: 'json',
      method: 'GET'
    },
    data: { error: [Object] },
    headers: {
      'alt-svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000',
      'cache-control': 'private',
      connection: 'close',
      'content-encoding': 'gzip',
      'content-type': 'application/json; charset=UTF-8',
      date: 'Wed, 26 Feb 2020 18:41:51 GMT',
      server: 'ESF',
      'transfer-encoding': 'chunked',
      vary: 'Origin, X-Origin, Referer',
      'x-content-type-options': 'nosniff',
      'x-frame-options': 'SAMEORIGIN',
      'x-xss-protection': '0'
    },
    status: 401,
    statusText: 'Unauthorized',
    request: { responseURL: 'https://admob.googleapis.com/v1/accounts' }
  },
  config: {
    url: 'https://admob.googleapis.com/v1/accounts',
    headers: {
      Authorization: 'Bearer [Removed]',
      'User-Agent': 'google-api-nodejs-client/5.10.1',
      'x-goog-api-client': 'gl-node/12.14.1 auth/5.10.1',
      Accept: 'application/json'
    },
    params: [Object: null prototype] {},
    paramsSerializer: [Function: paramsSerializer],
    validateStatus: [Function: validateStatus],
    responseType: 'json',
    method: 'GET'
  },
  code: 401,
  errors: [
    {
      message: 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.',
      domain: 'global',
      reason: 'unauthorized'
    }
  ]
}

Я пытался найти свою ошибку, выполняя поиск в Google, переполнение стека, читая учебные пособия по подключению к Admob API, а также читая код библиотеки. Я был бы очень признателен, если бы кто-то указал мне на решение.

1 Ответ

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

Проблема в том, что вы пытаетесь использовать служебную учетную запись, для которой требуются учетные данные пользователя OAuth. Вам нужно будет реализовать поток OAuth 2, в котором пользователь вводит свое имя пользователя и пароль Google.

AdMob: авторизация для запроса

См. Следующий пример Google на как создать node.js клиент OAuth 2.

https://github.com/googleapis/google-auth-library-nodejs#oauth2

...