admin管理员组

文章数量:815020

使用客户端凭据的Node.js https.request方法

我正在尝试使用https.request请求访问令牌,但我不断收到以下错误:

“错误”:“无效请求”,“错误说明”:“缺少授予类型”

在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()
}

任何帮助将不胜感激!

回答如下:

只是为了结束循环,我在标头中丢失了“ Content-Type”,我认为这是导致“ Missing Grant Type”错误的原因,因为它无法解析正文。我还需要在req.end()之前将postData写入请求。因此,感谢@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()
}

本文标签: 使用客户端凭据的Nodejs httpsrequest方法