我已经实施了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服务。
答案 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.com,http://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。