如何使用.Net构建安全的Web服务?

Fra*_*ans 8 .net security vbscript ws-security web-services

我需要构建一个简单的Web服务,通​​过Internet将数据输入和输出HR系统(这是一个托管解决方案).我正在使用IIS和ASP.Net与.Net 2.0.

看了之后,有几种方法可以确保网络服务的安全 - 我正在考虑选择哪种方法,并对一些优缺点进行一些观察.

这些是我所知道的方法:

SoapHeaders over SSL

将UID/PWD发布到Soap头中并实现SOAP扩展(链接).
非常简单的实现,并且应该通过SSL非常安全.由于相对简单,这是我的首选方案.此外,由于历史原因,我需要使用VBScript中的所有Web服务,因此只需处理简单的SOAP即可. 但是,有什么警告吗?我是否会让客户抱怨这是一种安全隐患?

将WCF与TransportWithMessageCredential一起使用

我发现很多旧文章指的是WS,如果我没有被误解,这就是现在在WCF中提供的内容?这个Microsoft链接有一个入门.
如果我理解正确,它会在客户端和服务器之间使用基于证书的安全性进行身份验证.这是正确的还是我完全错了?
我怀疑这将是一项更大的工作,至少在实施方面是明智的.此外,我将无法直接从VBScript访问Webservice,因此必须编写一个调用它的DLL然后在本地部署 - 正确吗?
这甚至可以在.Net 2.0中使用吗?

其他方法

  • 我可以禁止匿名访问asmx文件,并使用依赖IIS通过质询/响应进行身份验证.这在我的场景中实际上是实用的,但感觉非常不优雅(并且不知道如何从VBScript中完成这项工作).
  • 将UID传递给方法调用是SoapHeader的一个不好的表兄,所以我不会使用它.

对于解决这个问题的最佳方法,我将非常感激.如果有人有一个很好的论据,为什么Soap Headers是安全的,那么我很乐意听到它,因为这似乎是最简单的使用,只要它"足够安全".

Mic*_*lGG 3

您应该强烈考虑使用 IIS 和 Windows 来提供身份验证。IIS 可以将传入请求映射到 AD 用户(NTLM、证书、Kerberos 等)。从那里,您将拥有一个WindowsPrincipal,您可以使用它来要求用户位于一个组中。如果您不介意将组名称编译到代码中,您甚至可以在服务方法上使用PrincipalPermissionAttribute,这样它就完全是声明性的。

通过使用 Windows,您可以获得处理所有安全问题的平台。密码不会以纯文本形式传输,您也不需要创建和指定您自己的质询/响应类型系统(恶心)。不同的客户端可以以不同的方式进行身份验证(某些客户端需要证书,其他客户端允许 NTLM)。

最后,您将获得更少的代码,因为您可以使用 Windows 来管理用户并使用 .NET Framework 来强制执行安全检查。

编辑:

也许您认为保护 ASMX 很棘手,因为这是您正在考虑的唯一步骤?我同意!仅依赖于您已拒绝匿名的网络服务听起来确实非常弱。身份验证完成后, Web 服务代码本身应该要求组成员身份。这样,如果您错误配置服务器,您只是使其无法访问,而不是不安全。