节点soap,使用受密码保护的WSDL

时间:2014-11-19 22:47:18

标签: node.js web-services soap wsdl

我正在尝试使用Node构建SOAP客户端,我正在使用“soap”包(https://www.npmjs.org/package/soap)尝试使用受用户/密码保护的WSDL。

我无法在“soap.createClient”创建客户端之前找到如何传递这些凭据,当然,如果我没有提供正确的凭据,我就无法检索WSDL。

我尝试过:

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

然后调用“createClient”但无济于事。

另外,我已经尝试使用node-soap-client,这个客户端我(显然)可以连接到WSDL,但在那之后,我不知道该去哪里(如何调用方法) )。

我做错了什么?

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

用户名和密码凭证可以像这样传递:

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,谢谢你 Gabriel Lucena https://github.com/glucena

答案 1 :(得分:0)

当我将auth添加到标题时,我仍然遇到了问题。在阅读了代码和一些文章后,我发现这个工作。

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

    });
});

答案 2 :(得分:0)

如果其密码受保护,则还需要检查正确的安全性机制。我花了一天的时间来弄清楚该服务使用的是NTLM安全性(这是一个客户端项目,我只有用户名和密码才能访问wsdl)。在这种情况下,您需要传递正确的wsdl_options对象

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

此外,在使用任何服务之前,您需要在客户端上设置setSecurity。 完整说明的链接:https://codecalls.com/2020/05/17/using-soap-with-node-js/