Node JS soap请求中的身份验证

时间:2017-10-03 08:49:01

标签: node.js soap strong-soap

我正在使用strong-soap(https://www.npmjs.com/package/strong-soap)从Node JS中使用wsdl

我有一个带有如下标题的wsdl: -

<soapenv:Header>
    <wsse:Security xmlns:wsse="http://xyz.xsd">
        <wsse:UsernameToken wsu:Id="UsernameToken-24" xmlns:wsu="http://secure.xsd">
            <wsse:Username>userid</wsse:Username>
            <wsse:Password Type="http://pwdtext">password</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>
</soapenv:Header>

我需要在创建客户端时添加此标头信息。 我试过像

var url = "test?wsdl";
soap.createClient(url,  {wsdl_headers: {"Username": "username","Password":"password"} }, function(err, client) { 
    //some logic
});

但每次我收到肥皂故障“身份验证失败”。

知道我做错了吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我在尝试提取数据方面遇到了同样的问题。

我的错误在于createClient方法的选项是使用标题而不是 wsdl_headers

在调用任何方法之前,还在客户端上设置相同的身份验证

我的代码看起来像

var url = 'https://datahere?wsdl';
var httpOptions = {
  wsdl_headers: {
    'Authorization': 'Basic ' + new Buffer('username' + ':' + 'password').toString('base64')
  }
};

soap.createClient(url, httpOptions, function(err, client) {
  if (err) {
    console.log(err.message);
    response.status(401).end();
  } else {
    var requestArgs = {
      Method1: 'dummyData',
      Method2: ''
    };

    // client.setSecurity(new soap.BasicAuthSecurity('password', 'password'));
    client.addHttpHeader('customHeader1', 'words');
    client.addHttpHeader('Authorization', "Basic " + new Buffer('username-app-maker' + ':' + 'password').toString('base64'));
    client.GETSOAPMETHOD(requestArgs, function(err, result) {
      if (err) {
        console.log(err.message);
      }

      console.log('i found ' + result);
      response.send(result);
    });
  }
});

答案 1 :(得分:0)

正如this answer中所述,wsdl_header对象需要一个密钥&#39;身份验证&#39;

因此,请尝试运行以下代码:

var url = 'test?wsdl';
var auth = "Basic " + new Buffer("your username" + ":" + "your password").toString("base64");

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