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

时间:2010-03-14 20:58:13

标签: asp.net wcf ajaxcontroltoolkit

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

关于如何做到这一点的任何聪明的想法?也许我在想这个?

提前致谢。

3 个答案:

答案 0 :(得分:0)

简单的答案是你不能。复杂的答案是你可以用很多工作来捏造它,例如你可以

  1. 基于来电者IP的速率限制。
  2. 根据会话和速率限制删除cookie。
  3. 在页面加载时根据页面删除cookie并对其进行速率限制。
  4. 然而,没有一个是万无一失的,所有合法的请求都可能出错。

答案 1 :(得分:0)

如果确实想要将此限制为只有这一个发出请求的服务器,您可以将证书添加到该服务器并检查该证书。但是,您可能无法真正限制只能访问一个页面来调用您的服务。

你可以添加很多额外的元素,比如标题等等 - 但没有一个真的会完全合理 - 如果有人足够坚定,他们就能弄清楚你在做什么,并复制它。

所以真的:为什么你需要严格限制这种访问?

答案 2 :(得分:0)

我用不同的方法解决了这个问题。我没有尝试将服务保护到单个页面,而是通过检查HttpContext来确保为请求进行身份验证的用户来保护服务。这依赖于在WCF服务类上启用ASP.NET兼容性:http://msdn.microsoft.com/en-us/library/ms752234.aspx

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