как получить токен авторизации, если сессия в vcenter использует POST-запрос - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь получить токен сеанса для доступа к 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 я использовал authorization только с Basic Auth. Возвращает значение с ключом, и это то, что я пытаюсь получить.

Большое спасибо.

EDIT: файл вызывается здесь.

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 Ответ

1 голос
/ 01 июля 2019

Согласно API request, для аутентификации Basic вы можете указать ключ auth в опциях.Кроме того, вы также можете указать в URL.

Из npm doc:

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

ИЛИ,

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
});
...