Node.js метод https.request с использованием учетных данных клиента - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сделать запрос на токен доступа с помощью https.request, но все равно получаю следующую ошибку:

«error»: «invalid_request», «error_description»: «Отсутствует тип гранта»

В документации Node.js HTTPS.Request нет никаких ссылок на то, как установить тип предоставления. Я считаю, что мне нужно указать его в теле запроса, но также нет ссылки на прикрепление тела к запросу. Я пытаюсь сделать это с помощью переменной полезной нагрузки, но, очевидно, это не работает. Я также пытаюсь выполнить этот запрос с 0 или как можно меньшим количеством зависимостей.

  function getAccessToken() {
   const https = require('https')
   const payload = {
    "grant_type": "client_credentials"
   }
  const options = {
    "hostname": url,
    "method": "POST",
    "path" : "/oauth2/token",
    "port" : 443,
    "encoding": "utf8",
    "followRedirect": true,
    "headers": {
      "Authorization": "Basic <base64 encoded client_id:client_secret>",
      "scope": "PARTNER_READ"
    },
    "payload": payload,
    'muteHttpExceptions': true
  }
  const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`)
    res.on('data', d => {
      process.stdout.write(d)
    })
  })
  req.on('error', error => {
    console.error(error)
  })
  req.end()
}

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 11 мая 2020

Просто чтобы закрыть l oop на этом, мне не хватало «Content-Type» в заголовке, который, я думаю, вызывал ошибку «Missing Grant Type», потому что он не мог проанализировать тело. Мне также нужно было записать postData в запрос прямо перед req.end (). Так что спасибо @Klaycon за указание в правильном направлении!

Вот мой обновленный код:

  function getAccessToken() {
     const querystring = require('querystring');
     const https = require('https')
     const postData = querystring.stringify({
         'grant_type': 'client_credentials'
     });

  const options = {
    "hostname": url,
    "method": "POST",
    "path" : "/oauth2/token",
    "port" : 443,
    "encoding": "utf8",
    "followRedirect": true,
    "headers": {
      "Authorization": "Basic <base64 encoded client_id:client_secret>",
      "Content-Type": 'application/x-www-form-urlencoded',
      "Content-Length": Buffer.byteLength(postData),
    },
    'muteHttpExceptions': true
  }
  const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`)
    res.on('data', d => {
      process.stdout.write(d)
    })
  })
  req.on('error', error => {
    console.error(error)
  })
  req.write(postData);
  req.end()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...