2009-12-17 108 views
5

我已经得到了我们创建暴露一些方法给我们的客户(特别是如果他们打电话的方法的话,会引发我们的服务器上的事件),他们可以在自己的调用WebService的项目C#项目(有些客户会做网页表单应用程序,有些客户会在内部网站上做)。保护Web服务

由于方法的性质,其中一个参数是一个字符串,用于标识客户端是谁(因此我们可以触发适当的事件),并且我不太有信心,这足以防止人们随机发送数据,直到他们偶然发现其中一个有效的标识符。

什么是保护这样的东西免受滥用的标准方式?我发现的大部分教程似乎都没有提到任何有关保证他们安全的事情。谢谢!

回答

3

Daniel Vassallo是正确的。您将需要使用X509证书来验证调用该服务的人是否合法。然而,这确实提高了解决方案的复杂性。您将需要使用Microsoft WSE并可能购买第三方组件。

没有这个,你可以使用传入的用户名和密码。但是,需要一些共享算法来根据日期,时间等对散列信息进行散列处理。如果没有散列,你可以打开自己一个黑客远远不是。即使使用SSL,字典攻击也可能最终破裂。

+1

.NET 3.0向前放弃了内置位的WSE。而且你不需要第三方组件。你需要的是一个证书验证机制,或者你自己的证书服务器来颁发证书。 – blowdart 2009-12-17 21:04:51

1

你可能要检查出WS-Security协议。

该协议包含有关如何完整性和机密性可以在Web服务消息强制执行规范。

2
  1. 使用的用户名和密码,应该是不错的。
  2. 如果您知道将调用webservice的计算机的客户端IP地址,请将URL限制为仅限于已知的IP。
0

身份验证通常使用SOAP标头处理,请参阅this MSDN页面。

This codeguru文章举了一个例子,虽然它很老了。

0

作为协议的一部分,您可以向客户端发送一个随机数。 然后,客户端将该标识符与该随机数绑定在一起并散列组合的值。 您可能会将该组合值返回给服务器。

服务器然后计算相同的ID +数字散列并验证这两个值。

0

这是efectively密码......除了等待没有它的一个用户名和密码在一个领域。

没有技术原因本身为什么你不应该把用户名和密码合并到一个字段中,而是按照惯例在没有额外密钥的情况下它们是两个字段。

这是三个业务方面的原因:

  • 帐户身份可以明确的是应该知道的用户标识(用户名?!),但不具备密码的人之间进行讨论

  • 它在法律上证明未经授权的访问是最容易的,如果访问协议是常规的,那么是否有必要这样做,因为那么判例法更可能适用,情况更可能被明确裁减(并导致更少的法律账单!)。 。在公共网络上没有用于商业系统的用户名称并不是闻所未闻,并且在某些系统中是一个好主意(但通常它不过是一个好主意)。

  • 有关安全性最佳实践的指导方针通常和特定流程假定您使用用户名和密码,而不是可能的组合字段。这可能会让制定共识政策变得更加困难。

的密码(或者,如果用组合的用户名/密码串去的密码部分)将受有关变化的政策,不泄露,复杂性和长度上安全所有常见的建议。我建议你也使用SSL和WS-Security,以尽可能保持安全。您可能需要在电线上加密。

编辑

我的意思是写TLS而不是SSL。

编辑

没有对不起我的意思是TLS或WS-Security的。