8

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

经过研究,有几种方法可以确保 Web 服务的安全 - 我正在就选择哪种方法提出一些建议,并对优缺点提出一些看法。

这些是我知道的方法:

基于 SSL 的 SoapHeaders

在 Soap 标头中发布 UID/PWD 并实现 SOAP 扩展(链接)。
实现起来非常简单,并且通过 SSL 应该非常安全。由于相对简单,这是迄今为止我的首选选择。此外,由于历史原因,我需要从 VBScript 中使用 Web 服务,因此能够处理简单的 SOAP 是一个额外的好处。 但是,有什么注意事项吗?我会让客户抱怨这是一个安全风险吗?

将 WCF 与 TransportWithMessageCredential 一起使用

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

其他方法

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

对于解决此问题的最佳方法的任何建议,我将不胜感激。如果有人对为什么 Soap Headers 是安全的有一个很好的论据,那么我很想听听它,因为这似乎是最简单的使用,只要它“足够安全”

4

5 回答 5

3

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

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

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

编辑:

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

于 2009-03-19T19:49:29.330 回答
1

使用 WCF。它需要 .NET 3.0 或更高版本(也可以使用 3.5 SP1),但这只是带有几个服务包和一些新程序集的 .NET 2.0,所以它是安全的。

我建议不要再使用 ASMX Web 服务进行新开发,除非别无选择。

您可能已经阅读过“WSE”或“Web 服务扩展”。这些都是过时的,并且是对 ASMX Web 服务的一系列扩展,用于实现 WS-* 协议集。微软由此了解到ASMX平台的可扩展性不够,因此创建了WCF(Windows Communication Foundation)。像瘟疫一样避免 WSE。

于 2009-03-20T00:45:38.980 回答
0

上周我遇到了这个问题,我选择了带有 SSL 的 SOAP。我还将它与数据的 MD5 加密密钥结合起来。当然,这仅适用于您同时是服务器和客户端的“所有者”。

于 2009-03-19T19:35:13.047 回答
0

WCF 是要走的路。它提供了许多可能的安全解决方案,一些基于标准且可互操作,一些特定于 .NET 或 Windows。

快速搜索“WCF 安全”将为您提供大量资源,但我建议您从这篇文章开始: Michele Leroux Bustamante的“WCF 安全基础”

于 2009-03-19T19:57:23.993 回答
0

您还可以尝试使用 IIS 的 2 路 SSL,这将让您确保客户端是他们所说的身份,通过线路加密数据,并根据提供的证书以不同用户身份运行 Web 服务。

于 2009-03-20T00:21:31.703 回答