我有一个AjaxControlToolkit DynamicPopulate控件,它通过调用WCF服务进行更新。我知道我可以检查服务请求中的HttpContext,看看页面的用户(以及控件)是否经过身份验证。但是,我不希望任何聪明的人能够直接调用该服务,即使他们已经登录。我希望只允许访问该服务来处理从该页面发出的请求。主要是,我不希望任何人能够以编程方式进行大量调用,然后对服务后面的算法进行反向工程。
关于如何做到这一点的任何聪明的想法?也许我在想这个?
提前致谢。
答案 0 :(得分:0)
简单的答案是你不能。复杂的答案是你可以用很多工作来捏造它,例如你可以
然而,没有一个是万无一失的,所有合法的请求都可能出错。
答案 1 :(得分:0)
如果确实想要将此限制为只有这一个发出请求的服务器,您可以将证书添加到该服务器并检查该证书。但是,您可能无法真正限制只能访问一个页面来调用您的服务。
你可以添加很多额外的元素,比如标题等等 - 但没有一个真的会完全合理 - 如果有人足够坚定,他们就能弄清楚你在做什么,并复制它。
所以真的:为什么你需要严格限制这种访问?
答案 2 :(得分:0)
我用不同的方法解决了这个问题。我没有尝试将服务保护到单个页面,而是通过检查HttpContext来确保为请求进行身份验证的用户来保护服务。这依赖于在WCF服务类上启用ASP.NET兼容性:http://msdn.microsoft.com/en-us/library/ms752234.aspx
然后我可以访问服务中的HttpContext,并可以检查该调用是否来自经过身份验证的用户。 = d