如果使用POST请求在vcenter中的会话,如何获取身份验证令牌

时间:2019-07-01 11:03:03

标签: node.js request vcenter

我正在尝试获取会话令牌以访问VCenter。

我试图通过邮递员获得它,该邮递员对基本身份验证没有任何问题。当我尝试在NodeJS中执行相同操作时,我得到的数据为空。

这是我的代码

async function getListPolicy(url, username, password) {
    var auth = "Basic " + new Buffer.from(username + ":" + password).toString("base64");
    var header = {
        Authorization: auth,
        'Content-Type': 'application/json'
    }
    var options = {
        method: 'POST',
        url: url + '/rest/com/vmware/cis/session',
        headers: header,
    };
    return new Promise(function (resolve, reject) {
        request(options, function (error, response, body) {
            if (error) throw new Error(error);
            console.log(body);
            resolve(body);
        });
    });
}

在PostMan中,我仅将authorizationBasic Auth一起使用。它返回带有键的值,这就是我想要得到的。

非常感谢您。

编辑: 该文件在这里被调用。

const express = require("express");
const router = express.Router();
const getPolicies = require('./getPolicies.js');

router.post("/getListPolicy", getListPolicy);

module.exports = router;


async function getListPolicy(req, res, next) {
    var url = "https://xxx/";
    var username = "administrator@vsphere.local";
    var password = "xxx";
    var token = await getPolicies.getListPolicy(url, username, password);
    res.json(token);
}

1 个答案:

答案 0 :(得分:1)

根据request API,可以为Basic身份验证提供选项中的auth键。另外,您也可以在网址中指定。

来自npm doc

request.get('http://some.server.com/', {
  'auth': {
    'user': 'username',
    'pass': 'password',
    'sendImmediately': false
  }
});

OR

var username = 'username',
    password = 'password',
    url = 'http://' + username + ':' + password + '@some.server.com';

request({url: url}, function (error, response, body) {
   // Do more stuff with 'body' here
});