Impostazione dell’authorization nel client SOAP Node.js

Voglio accedere a un servizio WSDL tramite il client SOAP in Node.js. Ho usato il modulo nodo soap . Ma non riesco a trovare alcuna documentazione per impostare nome utente e password. Non creerò il server SOAP, voglio solo SOAPClient che è simile a SoapClient di PHP, utilizzando il quale dovrei poter accedere al servizio WSDL.

Aggiornamento :

Avevo biforcato e personalizzato la fonte per supportare questa funzione https://github.com/sincerekamal/node-soap

Puoi fornire nome utente e password in questo modo:

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

(derivato da https://github.com/vpulim/node-soap/issues/56 , grazie Gabriel Lucena https://github.com/glucena )

Un’altra opzione per aggiungere l’autenticazione di base è l’utilizzo di client.addHttpHeader. Ho provato sia setSecurity sia impostando wsdl_headers ma non ha funzionato per me durante l’autenticazione con Cisco CUCM AXL.

Ecco cosa ha funzionato per me:

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

Solo per condividere quello che ho letto da 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')); }); 

È necessario impostare il nome utente e la password passando l’authorization all’object wsdl_headers, ad es

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

Un piccolo aggiustamento alle risposte esistenti: è ansible utilizzare l’object di sicurezza per creare anche l’intestazione per la richiesta WSDL, ad es

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

Oppure, se stai utilizzando qualcosa di più complicato di BasicAuthSecurity, potresti anche dover impostare wsdl_options dall’object di sicurezza, ad es.

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