【问题标题】:How to implemented clientaccesspolicy.xml for WCF Restfull Service如何为 WCF Restful 服务实现 clientaccesspolicy.xml
【发布时间】:2014-05-25 17:01:57
【问题描述】:

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

我正在使用 AJAX 调用该服务,

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

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

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

所以我google了一下,发现我们可以把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 服务。

【问题讨论】:

  • 我的建议对你有帮助吗?

标签: c# asp.net ajax wcf


【解决方案1】:

如果您在 IIS 上托管应用程序,您只需将 web.config 添加到您的 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,您可以设置应用程序地址: 访问控制允许来源: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。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多