【问题标题】:Authentication in Node JS soap requestNode JS 肥皂请求中的身份验证
【发布时间】:2017-10-03 08:49:01
【问题描述】:

我正在使用 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
});

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

知道我做错了什么吗?

提前致谢。

【问题讨论】:

    标签: node.js soap strong-soap


    【解决方案1】:

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

    我的错误是 createClient 方法的选项是使用 headers 而不是 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);
        });
      }
    });
    

    【讨论】:

      【解决方案2】:

      this answer 中所述,wsdl_header 对象需要一个密钥“身份验证”

      所以尝试运行以下代码:

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

      【讨论】:

      • 我试过上面的方法。它没有用。我仍然收到肥皂故障错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      相关资源
      最近更新 更多