Настройка запроса к Google My Business API во избежание ошибки неаутентифицированной - PullRequest
0 голосов
/ 02 мая 2018

При отправке запроса в Google My Business API в моем приложении Node.js я получаю сообщение об ошибке, не прошедшую проверку подлинности. Ответ:

{
  "error": {
    "code": 401,
    "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.",
    "status": "UNAUTHENTICATED"
  }
}

Для чего бы то ни было, я использую клиент запрос-обещание, чтобы сделать запрос. Моя функция ниже. Я только что получил токен доступа, так что я вполне уверен, что это хорошо, и я могу видеть его через журнал err.options.Authorization. Я знаю, что идентификатор местоположения еще не существует, но я не думаю, что именно об этом говорит мне ошибка.

const request = require('request-promise');
...
function checkLocation (loc) {
  return request({
    method: 'GET',
    uri: `https://mybusiness.googleapis.com/v4/accounts/${ACCOUNT_ID}/locations/${loc._id}`,
    Authorization: `OAuth ${ACCESS_TOKEN}`
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (err) {
    console.error(err.error, err.options.Authorization);
  });
}

Мой запрос отформатирован неправильно или я не отправляю все, что мне нужно?

Обновление: Я пропустил, возможно, важную информацию о том, что это происходит через процесс одноразовой авторизации для серверных приложений, как описано здесь: https://developers.google.com/identity/protocols/OAuth2. Моя проблема заключена в предложении о на этой странице: «После того, как приложение получает токен доступа, оно отправляет токен в Google API в заголовке авторизации HTTP».

1 Ответ

0 голосов
/ 03 мая 2018

Оказалось, мой заголовок не был правильно отформатирован. Ключ авторизации должен быть в headers объекте:

{
  method: 'GET',
  uri: `https://mybusiness.googleapis.com/v4/accounts/${ACCOUNT_ID}/locations/${loc._id}`,
  headers: {

    Authorization: `OAuth ${ACCESS_TOKEN}`

  }
}
...