Node soap, consume password protected WSDL

旧城冷巷雨未停 提交于 2020-05-29 03:54:03

问题


I'm trying to build a SOAP client with Node, I'm using "soap" package (https://www.npmjs.org/package/soap) trying to consume a user/password protected WSDL.

I can't find how to pass those credentials before creating the client by "soap.createClient", and of course, I can't retrieve the WSDL if I don't provide the right credentials.

I've tried doing:

soap.security.WSSecurity('user', 'pass');

and then calling "createClient" but to no avail.

Also, I've tried to do it with the node-soap-client, with this client I (apparently) can connect to the WSDL, but after that, I've no idea where to go (how to invoke methods).

What am I doing wrong?

Thanks for all your help!


回答1:


Username and password credentials can be passed like this:

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

(derived from https://github.com/vpulim/node-soap/issues/56, thank you Gabriel Lucena https://github.com/glucena)




回答2:


when I added the auth to the headers I still had a problem. After reading the code and a number of articles I found this to work.

// or use local wsdl if security required
let url = 'http://service.asmx?wsdl' 
let wsdl = 'wsdl.wsdl';
let soap = require('soap');
let util = require('util')

soap.createClient(wsdl, function(err, client) {

    //don't forget to double slash the string or else the base64 will be incorrect
    client.setSecurity(new soap.BasicAuthSecurity('admin\\userName', 'password'));

    client.MethodFromWSDL(args, function (err, result) {
        console.log(util.inspect(result,{depth: null}))

    });
});



回答3:


If its password protected you also need to check the correct security mechanism. I spend a day trying to figure out that the service used NTLM security(it was a clients project and I only got username and password to access the wsdl). In that case, you would need to pass the correct wsdl_options object

var wsdl_options = {
  ntlm: true,
  username: "your username",
  password: "your password",
  domain: "domain",
  workstation: "workstation"
}

soap.createClient(data.credentials[data.type], {
    wsdl_options
  },
  function(err, client) {
    console.log(client.describe());
  });

Also, you would need to setSecurity on the client before using any service. the link to complete explanation: https://codecalls.com/2020/05/17/using-soap-with-node-js/



来源:https://stackoverflow.com/questions/27028509/node-soap-consume-password-protected-wsdl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!