【问题标题】:Node soap ClientSSLSecurityPFX - 403 Forbidden节点肥皂 ClientSSLSecurityPFX - 403 禁止
【发布时间】:2018-05-17 06:04:51
【问题描述】:

我正在尝试使用 node-soap 连接到 SOAP 服务,但得到了 403 - Forbidden

我有一个 pfx 文件和密码,我正在尝试:

var pfx = fs.readFileSync(path.join(__dirname, 'folder', 'my.pfx')); // pfx file is in the relative path './folder/my.pfx'
var password = 'mypassword';
var options = {
  strictSSL: true,
  rejectUnauthorized: false,
  hostname: myUrl,
  forever: true
};
var security = new soap.ClientSSLSecurityPFX(pfx, password, options);
var url = 'https://theservice.com/ApplicationService.svc?singleWsdl';
soap.createClient(url, function (err, client) {
  console.log(err);
  console.log(client);
  client.setSecurity(security);
});

但我得到 403:

[Error: Invalid WSDL URL: https://theservice.com/ApplicationService.svc?singleWsdl

 Code: 403

 Response Body: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <title>403 - Forbidden: Access is denied.</title>...

    client.setSecurity(security);
          ^    
TypeError: Cannot read property 'setSecurity' of undefined

我可以通过将 pfx 安装到 MacOS 钥匙串来通过浏览器访问该服务。所以 URL、pfx、密码等应该没问题。

关于可能是什么问题以及如何调试的任何想法?谢谢!

【问题讨论】:

    标签: node.js soap-client http-status-code-403 pfx node-soap


    【解决方案1】:

    我通过将 pfx 和密码设置为 options.wsdl_options 来成功连接:

      var options = {
        wsdl_options: {
          forever: true,
          rejectUnauthorized: false,
          strictSSL: false,
          pfx: fs.readFileSync(__dirname + '/folder/my.pfx'),
          passphrase: 'myPass'
        }
      };
      soap.createClient(myUrl, options, function (err, client) {
        console.log(err);
        console.log(client);
      });
    

    通过这种方式,它们最终获得 HTTP 选项并启用与客户端证书的连接。

    【讨论】:

      【解决方案2】:

      在我的情况下,除了@mooses 的回答之外,我还必须这样做,也许它会帮助某人(使用他们的例子):

        var options = {
          wsdl_options: {
            forever: true,
            rejectUnauthorized: false,
            strictSSL: false,
            pfx: fs.readFileSync(__dirname + '/folder/my.pfx'),
            passphrase: 'myPass'
          }
        };
        soap.createClient(myUrl, options, function (err, client) {
          client.setSecurity(new soap.ClientSSLSecurityPFX(pfx, pfxPass)); // <-----
          console.log(err);
          console.log(client);
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多