通过节点代理调用WCF服务仅适用于localhost

时间:2015-08-28 17:49:46

标签: node.js proxy wcf-data-services ntlm node-http-proxy

我正在尝试在另一个域上调用WCF数据服务。该服务使用NTLM,返回的JSON取决于经过身份验证的用户。我正在使用node-http-proxy来克服跨域问题。 服务,让我们说

  

的http:// otherdomain:1234 /dataservice.svc/getData

返回类似

的JSON
    {
        "description": "xxxxx",   
        "data": {
            "subclass": [
                [
                    {
                        "name": "xxxxx",
                        "keys": {     
                        },
                        "children": "xx"
                    }
                ]
            ]
        },
        "parameter": "someparam",
        "option": {
              "someoption": []
            }
     }

对于未配置数据的用户,它只返回一个空的JSON骨架,如

    {
        "description": "",   
        "data": {},
        "parameter": "",
        "option": {}
     }

在我的代理服务器中,我将target设置为http://otherdomain:1234并将服务称为

  

的http:// 本地主机:8003 /dataservice.svc/getData

来自我的客户端应用程序。这非常好(从应用程序和浏览器直接)。 NTLM身份验证正在运行;没有CORS问题。我像第一个例子那样得到了JSON。

但是当我使用我的IP地址调用代理时,就像这样

  

的http:// 10.203.147.21:8003 /dataservice.svc/getData

我只获得空的JSON骨架,没有其他错误。这里发生了什么?使用localhost但不使用IP。

有趣的是,这也发生在实际的服务上;即如果我使用数据服务器的IP地址(直接从浏览器调用)而不是名称,我得到一个类似的空JSON。

  

的http:// 10.203.147.34:1234 /dataservice.svc/getData

有人能解释一下这里发生了什么吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

changeOrigin true对象中设置optionshttpProxy已解决此问题。现在,代理能够正确地协商来自不同域的NTLM。 猜猜服务器正在为来自不同来源的请求返回空响应。