繁体   English   中英

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

[英]How do I restrict the WCF service called by an ASP.NET AJAX page to only allow calls for that page?

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

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

提前致谢。

简单的答案是你做不到。 复杂的答案是您可能需要花很多精力去做,例如

  1. 基于呼叫者IP的速率限制。
  2. 根据会话和速率限制删除Cookie。
  3. 在页面加载时根据页面放置cookie,并对其进行速率限制。

但是,没有一个是万无一失的,合法请求都可能出错。

如果您确实希望将其限制为仅发出请求的一台服务器,则可以向该服务器添加证书并检查该证书。 但是,您可能无法真正将访问限制为仅调用服务的单个页面

您可以添加很多其他元素,例如标头等-但实际上并不能完全听起来很合理-如果一个人有足够的决心,他们将能够弄清楚您在做什么,然后复制它们。

确实如此:为什么您需要对此访问权限进行严格限制?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM