Настройка авторизации в Node.js SOAP Client

Я хочу получить доступ к службе WSDL через клиент SOAP в Node.js. Я использовал модуль мыльного узла. Но я не могу найти какую-либо документацию для установки имени пользователя и пароля. Я не собираюсь создавать SOAP-сервер, я просто хочу SOAP Client, который похож на PHP SoapClient, с помощью которого я должен иметь доступ к службе WSDL.

Обновление:

Я разветвлял и настраивал источник для поддержки этой функции https://github.com/sincerekamal/node-soap

5 ответов

Вы можете указать имя пользователя и пароль следующим образом:

var soap = require('soap');
var url = 'your WSDL url';
var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64");

soap.createClient(url, { wsdl_headers: {Authorization: auth} }, function(err, client) {
});

(получено с https://github.com/vpulim/node-soap/issues/56, спасибо, Габриэль Лусена, https://github.com/glucena)

Другой вариант добавления базовой аутентификации - использование client.addHttpHeader. Я пробовал и setSecurity, и настройку wsdl_headers, но ни одна из них не работала для меня при аутентификации в Cisco CUCM AXL.

Вот что сработало для меня:

var soap = require('soap');
var url = 'AXLAPI.wsdl';  // Download this file and xsd files from cucm admin page
var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64");
soap.createClient(url,function(err,client){
  client.addHttpHeader('Authorization',auth);
});

Просто чтобы поделиться тем, что я прочитал с https://github.com/vpulim/node-soap:

var soap = require('soap');
var url = 'your WSDL url';

soap.createClient(url, function(err, client) {
    client.setSecurity(new soap.BasicAuthSecurity('your username','your password'));
});

Небольшая настройка существующих ответов: вы можете использовать свой объект безопасности для создания заголовка и для запроса WSDL, например:

const security = new soap.BasicAuthSecurity(username, password);
const wsdl_headers = {};
security.addHeaders(wsdl_headers);
soap.createClientAsync(url, { wsdl_headers }).then((err, client) => {
    client.setSecurity(security);
    // etc.
});

Или, если вы используете что-то более сложное, чем BasicAuthSecurity, вам также может потребоваться установить wsdl_options из объекта безопасности, например

const security = new soap.NTLMSecurity(username, password, domain, workstation);
const wsdl_headers = {}, wsdl_options = {};
security.addHeaders(wsdl_headers);
security.addOptions(wsdl_options);
soap.createClientAsync(url, { wsdl_headers, wsdl_options }).then((err, client) => {
    client.setSecurity(security);
    // etc.
});

Вам нужно установить имя пользователя и пароль, передав авторизацию объекту wsdl_headers, например

var auth = "Basic " + new Buffer('username' + ':' + 'password').toString("base64");

var client = Soap.createClient('wsdlUrl', { wsdl_headers: { Authorization: auth } }, (err, client) => {
    if (err) {
        throw err;
    } else {
        client.yourMethod();
    }
});
Другие вопросы по тегам