Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点soap—如何在每个请求中传递证书和基本授权头?_Node.js_Ssl_Soap_Basic Authentication_Node Soap - Fatal编程技术网

Node.js 节点soap—如何在每个请求中传递证书和基本授权头?

Node.js 节点soap—如何在每个请求中传递证书和基本授权头?,node.js,ssl,soap,basic-authentication,node-soap,Node.js,Ssl,Soap,Basic Authentication,Node Soap,我将lib用于SOAP服务,并且是第一次使用它。我有一个要求,我需要通过两个证书和基本授权头与每个要求强制性 我实现了以下代码: var options = { wsdl_options: { key: fs.readFileSync(path.resolve("./xxx.key")), cert: fs.readFileSync(path.resolve("./xxx.crt")), ca: fs.readFileSync(path.r

我将lib用于SOAP服务,并且是第一次使用它。我有一个要求,我需要通过两个证书和基本授权头与每个要求强制性

我实现了以下代码:

var options = {
    wsdl_options: {
        key: fs.readFileSync(path.resolve("./xxx.key")),
        cert: fs.readFileSync(path.resolve("./xxx.crt")),
        ca: fs.readFileSync(path.resolve("./xxx.pem")),
    },
    wsdl_headers : {    
     Authorization : 'Basic ' + new Buffer(username +':'+ password ).toString('base64')
    },
    "overrideRootElement": {
        "namespace": "con",
    },
    envelopeKey : 'soapenv'
};



soap.createClient(url, options, function(err, client) {
    if(err){
        console.log("Error ::: >",err);
        res.json({message : err});
    }


    if(client){
        console.log(JSON.stringify(client.describe()));
        var data = actualRequestObject  

        client.setSecurity(new soap.ClientSSLSecurity(
            fs.readFileSync(path.resolve("./XXX.key")), 
            fs.readFileSync(path.resolve("./XXX.crt")),
            fs.readFileSync(path.resolve("./XXX.pem"))
        ));

        client.setSecurity(new soap.BasicAuthSecurity(username, password));
        client.IndicativeEnrichment(data, function(err, result){
            console.log("lastRequest :::: >>>>> ",client.lastRequest);
            if(err){
                console.log("ERROR Enrichment :::: >>> ", err);
            }

            if(result){
                console.log("RESULT ::: >>>>", result);
            }
        })
    }
});
当我试图使用setSecurity()方法设置基本身份验证和证书时。它覆盖了我使用setSecurity()设置的第一项内容。如果我没有通过任何一个测试,我就会犯未经授权的错误


请帮助我提供解决方案

获取客户端证书和基本身份验证的一个好方法是。您可以从中获得灵感并将它们结合起来,或者编写一个足够通用的安全协议来链接两个(或更多)现有安全协议。当然,使用该解决方案创建一个pull请求会更好,因此可以考虑将其直接包含在
节点soap

个人最终向构造函数传递了附加的
选项


这种方法还可以用于将基本身份验证与中使用的文件结合起来。

我已通过覆盖请求模块解决了此问题<代码>请求:request.defaults({headers:{Authorization:'Basic XXXXXXXXX'}}})但我不确定这是不是正确的方法。如果有人对此有想法,请帮助我。谢谢你@Joel的建议。我一定要试试这个。
var https = require('https');

var options = {
  // https://nodejs.org/api/https.html#https_class_https_agent
  agent: new https.Agent({
    key: someKeyBuffer,
    cert: someCertBuffer,
    ca: [
      someCACertBuffer,
    ]
  });
}

client.setSecurity(new soap.BasicAuthSecurity('username', 'password', options));