如何有效地验证呼叫Web服务的用户?

时间:2008-12-15 18:34:59

标签: asp.net web-services security

在多服务器环境中,用户可以使用页面来放置,更新或删除服务器上的文件。我正在考虑使用IIS线程调用的webservice(在每个服务器上)来完成这项工作(使用aspx管理页面)。

但是,出于显而易见的原因,我真的不希望任何人能够调用该Web服务(通过从他们的机器发布格式良好的请求)。

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

2 个答案:

答案 0 :(得分:1)

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

如果您通过浏览器访问页面,那么我建议使用Cookie来传输哈希。

注意:我说SHA1哈希是因为它的160位长(40字节)。因此,如果您将时间与用户独有的东西结合使用来生成摘要,那么碰撞就不容易了。

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

答案 1 :(得分:0)

您应该能够通过获取存储在以下位置的IPrinciple对象来获取正在调用Web服务的用户:

IPrinciple _currentUser = HttpContext.Current.User;

获得当前用户后,您应该能够通过检查用户是否处于正确的角色来验证该用户是否有权执行他们尝试执行的任何操作,或者无论你设置什么其他方法来检查权限。