繁体   English   中英

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

[英]Node.js https.request method using client credentials

我正在尝试使用 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()
}

任何帮助,将不胜感激!

只是为了结束这个循环,我错过了 header 中的“内容类型”,我认为这导致了“缺少授权类型”错误,因为它无法解析正文。 我还需要在 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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM