如何为WCF Restful Service实现clientaccesspolicy.xml

时间:2014-04-11 13:40:02

标签: c# asp.net ajax wcf

我已经实施了WCF Rest全面服务。我也将它配置为跨域,但现在我的问题是如何保护它。

我使用AJAX调用该服务,

$(document).ready(function () {
        $.getJSON("http://localhost:52823/Handler/RequestService/GetPeople", function (data) {

            $("#response").append(JSON.stringify(data));
        });
    });

现在,当我从ajax调用时,我的服务链接对浏览器中的每个人都可见,所以任何人都可以调用该服务并获取该数据。

所以我谷歌发现我们可以将clientaccesspolicy.xml放到服务器的根文件夹中,我们可以配置特定的域。所以我尝试使用下面的代码

<?xml version="1.0" encoding="utf-8" ?> <access-policy>
<cross-domain-access>
    <policy>
        <allow-from http-request-headers="SOAPAction">
            <domain uri="myipaddress or domainname"/>
        </allow-from>
        <grant-to>
            <resource path="/" include-subpaths="true"/>
        </grant-to>
    </policy>
</cross-domain-access>

但它没有工作,所以任何人都可以帮助我保护WCF服务。

1 个答案:

答案 0 :(得分:1)

如果您在IIS上托管应用程序,您只需添加到web.config:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, POST" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

对于Access-Control-Allow-Origin,您可以设置应用程序地址: Access-Control-Allow-Origin:http://domain1.comhttp://domain2.com

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="http://domain1.com" />
      <add name="Access-Control-Allow-Methods" value="GET, POST" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

您还可以达到目标,编写为每条消息添加特定标头的行为。这是一个指南: http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx

有一个常量CorsConstants.Origin,您可以设置您的域名。

要检查响应是否需要标题,您可以使用fiddler。