Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
如何将ASP.NET AJAX页面调用的WCF服务限制为只允许调用该页面?_Asp.net_Wcf_Ajaxcontroltoolkit - Fatal编程技术网

如何将ASP.NET AJAX页面调用的WCF服务限制为只允许调用该页面?

如何将ASP.NET AJAX页面调用的WCF服务限制为只允许调用该页面?,asp.net,wcf,ajaxcontroltoolkit,Asp.net,Wcf,Ajaxcontroltoolkit,我有一个AjaxControlToolkit DynamicPopulate控件,该控件通过调用WCF服务进行更新。我知道我可以在服务请求中检查HttpContext,以查看页面的用户以及控件是否经过身份验证。然而,我不希望任何聪明的人能够直接调用服务,即使他们已经登录。我希望仅允许从页面发出的请求访问该服务。主要是,我不希望任何人能够通过编程进行大量调用,然后对服务背后的算法进行反向工程 关于如何做到这一点,有什么聪明的想法吗?也许我想得太多了 提前谢谢。简单的答案是你不能。复杂的答案是,你可

我有一个AjaxControlToolkit DynamicPopulate控件,该控件通过调用WCF服务进行更新。我知道我可以在服务请求中检查HttpContext,以查看页面的用户以及控件是否经过身份验证。然而,我不希望任何聪明的人能够直接调用服务,即使他们已经登录。我希望仅允许从页面发出的请求访问该服务。主要是,我不希望任何人能够通过编程进行大量调用,然后对服务背后的算法进行反向工程

关于如何做到这一点,有什么聪明的想法吗?也许我想得太多了


提前谢谢。

简单的答案是你不能。复杂的答案是,你可以用大量的工作来蒙混过关,例如,你可以

基于呼叫方IP的速率限制。 根据会话和速率限制删除cookie。 当页面加载时,根据页面删除cookie,并对其进行速率限制。 然而,没有一个是万无一失的,所有合法请求都可能出错

如果您真的想将此限制在发出请求的这台服务器上,您可以向该服务器添加一个证书并检查该证书。但是,您可能无法真正将访问权限限制为调用服务的单个页面

你可以添加很多额外的元素,比如标题等等。但是没有一个是完全正确的。如果有人有足够的决心,他们将能够理解你在做什么,并复制它


那么,真的吗:为什么你需要如此严格地限制这种访问呢?

我用另一种方法解决了这个问题。我没有试图将服务保护到单个页面,而是通过检查HttpContext来确保发出请求的用户经过身份验证,从而保护了服务。这取决于在WCF服务类上启用的ASP.NET兼容性:


然后,我可以访问服务中的HttpContext,并可以检查调用是否来自经过身份验证的用户=D

也许你可以添加一些逻辑来检查引用的限制访问。只是对我自己的帖子的一个跟进。禁用web服务文档的简单方法。添加到配置文件的节点:如果您正在使用Ajax服务,Ajax代理脚本将提供与生成WDSL相同的信息-因此,即使关闭默认情况下用于Ajax服务的WSDL,也不是真正的帮助。@blowdart:so,通过Ajax代理脚本,您是指在页面源代码中呈现的生成javascript?我想你是对的:服务方法参数将在该脚本中公开,是吗?真倒霉嗯,我已经意识到,在网站拥有大量流量之前,我不应该真的担心这些事情。我试图解决的问题都是很好的问题,在必要时可以在未来的迭代中解决。是的,这就是我的意思——没有它,你就不能称之为web服务:有意义。我正在考虑实现这一功能,以打击用户帐户共享。很高兴知道。谢谢。这项服务为高价值市场提供了有价值的信息。1000万强大的消费者群体,年收入80亿美元。尽可能严格地锁定它以挫败竞争对手似乎很重要。@NovaJoe:好的,这很有意义-那么您可以在请求来自的web服务器上放置特定的证书吗?在我看来,这可能是最安全的第一步。证书是一个很好的建议。听起来类似于我安装的站点到站点VPN。一台服务器,一台客户端。设定它,然后忘记它。