2008-12-15 66 views
1

在多服务器环境中,用户将能够使用页面来放置,更新或删除服务器上的文件。我正在考虑使用IIS线程调用的web服务(在每台服务器上)来完成这项工作(使用aspx管理页面)。但是,由于显而易见的原因,我并不希望任何人都能够调用该web服务(通过在他们的机器上发布格式良好的请求)。如何有效验证用户调用Web服务?

我想知道什么是最有效的(在复杂性,可扩展性方面),以确保对web服务的访问仅限于我的页面(令牌?发送当前用户的Principal?我没有访问权限因此发送登录名/密码对是不可能的)

+0

这是内部还是外部? – JFV 2008-12-15 18:42:34

+0

所有服务器都转到集中式Web服务吗? – 2008-12-15 18:50:57

回答

0

你应该能够获取的呼唤通过获取IPrinciple对象的Web服务存储在用户:

IPrinciple _currentUser = HttpContext.Current.User; 

一旦你的当前用户,你应该能够做是否您的验证不是该用户有权通过检查用户是否处于正确角色或者您为检查权限而设置了其他任何方式来执行他们试图执行的任何操作。

1

您可以将SHA1哈希与浏览器组合(例如MSIE6.0或FireFox3)生成的每个传入请求的IP地址相关联, IP地址,用户名(如果可能的话)和/或时间,并将其存储在数据库(可能是sqlite)中,并具有适合文件上传/传输完成(例如1小时)的到期时间。因此,对于每个请求,您可以使用IP地址检查关联的散列。

如果通过浏览器查看页面,那么我建议使用cookie来传输哈希。

注:我说SHA1哈希,因为它的160位长(40字节)。所以碰撞并不容易,尤其是如果您将时间与用户特有的某些内容结合使用以产生摘要。

我在C++上工作,所以我在CGI应用程序中实现了类似的功能。