我需要构建一个简单的Web服务,以便通过Internet将数据输入和输出HR系统(这是一个托管解决方案)。我正在使用IIS和ASP.Net与.Net 2.0。
看了之后,有几种方法可以确保网络服务的安全 - 我正在考虑选择哪种方法,并对一些优点和缺点进行一些观察。
这些是我所知道的方法:
将UID / PWD发布到Soap标头中并实现SOAP扩展(link) 非常简单的实现,并且应该通过SSL非常安全。由于相对简单,这是我的首选方案。此外,由于历史原因,我需要使用VBScript中的所有Web服务,因此只需处理简单的SOAP即可。 但是,有什么警告吗?我是否会让客户抱怨这存在安全隐患?
我发现很多旧文章指的是WS,如果我没有误解,这就是WCF现在提供的内容? This Microsoft link有一本入门书
如果我理解正确,它会在客户端和服务器之间使用基于证书的安全性进行身份验证。这是正确的还是我完全错了?
我怀疑这将是一项更大的工作,至少在实施方面是明智的。此外,我将无法直接从VBScript访问Webservice,因此必须编写一个调用它的dll,然后在本地部署 - 正确吗?
这甚至可以在.Net 2.0中使用吗?
对于解决这个问题的最佳方法,我会非常感激。如果有人有一个很好的论据,为什么Soap Headers是安全的,那么我很乐意听到它,因为这似乎是最简单的使用,只要它“足够安全”。
答案 0 :(得分:3)
您应该强烈考虑使用IIS和Windows来提供身份验证。 IIS可以将传入请求映射到AD用户(NTLM,证书,Kerberos等)。从那里,您将拥有一个WindowsPrincipal,您可以用它来要求用户在一个组中。如果您不介意将组名编译到代码中,您甚至可以在服务方法上使用PrincipalPermissionAttribute,这样它就完全是声明性的。
通过使用Windows,您可以获得处理所有安全问题的平台。密码不会以纯文本形式传输,也不需要创建和指定自己的质询/响应类型系统(yuck)。不同的客户端可以以不同的方式进行身份验证(需要一些证书,允许其他人使用NTLM)。
最后,由于您可以使用Windows管理用户和.NET Framework来强制执行安全检查,因此最终会得到更少的代码。
修改强>
也许您认为保护ASMX很难得,因为这是您正在寻找的唯一一步?我同意!只依赖于您拒绝匿名的网络服务确实听起来很弱。在认证完成后,Web服务代码本身应该要求组成员资格。这样,如果你错误配置了服务器,你就无法访问它,而不是不安全。
答案 1 :(得分:1)
使用WCF。它需要.NET 3.0或更高版本(同样使用3.5 SP1),但这只是带有几个服务包和一些新程序集的.NET 2.0,因此它是安全的。
我建议不要再使用ASMX Web服务进行新开发,除非别无选择。
您可能已阅读有关“WSE”或“Web服务扩展”的信息。这些已经过时,是ASMX Web服务的一系列扩展,用于实现WS- *协议集。由此,Microsoft了解到ASMX平台不够可扩展,因此创建了WCF(Windows Communication Foundation)。像瘟疫一样避免使用WSE。
答案 2 :(得分:0)
上周我遇到过这个问题,我选择了SOAP和SSL。我还把它作为MD5加密的数据密钥组合在一起。当然,只有当您是服务器和客户端的“所有者”时才适用。
答案 3 :(得分:0)
WCF是要走的路。它提供了许多可能的安全解决方案,一些基于标准和可互操作,一些.NET或Windows特定。
快速search on 'WCF security'会为您提供大量资源,但我建议您从这篇文章开始:'Fundamentals of WCF Security'作者:Michele Leroux Bustamante。
答案 4 :(得分:0)
您还可以尝试使用IIS的2路SSL,这样可以确保客户端是他们所说的人,通过线路加密数据,还可以根据证书运行不同用户的Web服务提供。