保证使用 ASP.NET 创建的 XML Web services 的安全

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

在确定 Web 服务的最佳安全实现时,首先要考虑两个关键的安全原则:身份验证和授权。身份验证是根据凭据(如用户名和密码)通过授权机构验证身份的过程。在身份得到验证后,授权将确定该身份是否被授权访问某一资源。

使用 ASP.NET 创建的 Web 服务可从 ASP.NET 或基于 SOAP 的自定义安全所提供的身份验证和授权选项中选择其安全选项。ASP.NET 与 Internet 信息服务 (IIS) 一起操作以提供多个身份验证和授权选项。还可以创建自定义身份验证选项,如使用 SOAP 标头。此外,ASP.NET 还提供了使用客户端凭据执行请求的功能(称为模拟)。有关使用模拟的更多信息,请参见 ASP.NET 模拟

本主题总结使用 ASP.NET 生成的 Web 服务可用的身份验证和授权选项。有关 ASP.NET Web 应用程序可用的安全选项的更多信息,请参见保证 ASP.NET Web 应用程序的安全Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication(生成安全的 ASP.NET 应用程序:身份验证、授权和安全通信)。

有关从基于 ASP.NET 的应用程序中访问远程资源的更多信息,请参见Building Secure ASP.NET Applications(生成安全的 ASP.NET 应用程序)第 3 章中的“Impersonation/Delegation Model”(模拟/委托模型)和“Trusted Subsystem Model”(受信任的子系统模型)。

XML Web services 的身份验证选项

使用 ASP.NET 创建的 Web 服务有若干个用于对客户端进行身份验证的选项,主要问题在于:哪个选项适用于特定的 Web 服务?在选择合适的安全选项时,开发人员必须从中做出选择的是:安全级别和性能。对于某些 Web 服务而言,使用加密通过网络发送客户端凭据很关键,因此对客户端凭据进行加密的算法非常重要。例如,编写用于处理信用卡的 Web 服务的开发人员可能更担心客户端凭据被盗,而不是加密信用卡数据所造成的额外开销。

下表汇总了使用 ASP.NET 生成的 Web 服务可用的身份验证选项。带有 Windows 前缀的选项是使用 ASP.NET 创建的 Web 服务可用的 Microsoft Windows 身份验证选项的一部分。

身份验证选项摘要

身份验证选项 说明

Windows - 基本

用于不安全的客户端身份,因为用户名和密码在纯文本中以 base 64 编码字符串的形式发送。在此类型的身份验证中,密码和用户名已编码,但未加密。配有网络监视工具的确定的恶意用户可以截获用户名和密码。

Windows - 基本(通过 SSL)

用于 Internet 方案中的安全客户端身份。使用安全套接字层 (SSL) 加密而非纯文本格式通过网络发送用户名和密码。这样相对来说更易于配置,并且适用于 Internet 方案。但是,使用 SSL 会降低性能。

Windows - 摘要式

用于 Internet 方案中的安全客户端身份。使用哈希以加密方式传输客户端凭据,从而避免以纯文本格式传输密码。此外,摘要式身份验证还可用于代理服务器。但在其他平台上并未得到广泛支持。

Windows - 集成 Windows

使用 NTLM 或 Kerberos。将加密交换与用户的 Microsoft Internet Explorer Web 浏览器结合使用。

Windows - 客户端证书

用于 Internet 和 Intranet 方案中的安全客户端身份。要求每个客户端都从互相信任的证书颁发机构那里获取证书。可以选择将证书映射到用户帐户,IIS 使用用户帐户来授权对 Web 服务的访问。

Forms

Web 服务不支持。在 Forms 身份验证系统中,使用 HTTP 客户端重定向将未经身份验证的请求重定向到 HTML 窗体。大多数 Web 服务客户端都不想使用 UI 提供凭据;如果想使用 Forms 身份验证,则必须解决此问题。

SOAP 标头 - 自定义

对于安全和不安全的 Internet 方案都很有用。用户凭据在 SOAP 消息的 SOAP 标头中进行传递。无论由什么平台承载 Web 服务,Web 服务器都提供自定义身份验证实现。

对于上面列出的所有选项,除了使用 SOAP 标头外,安全设置均使用配置文件和 IIS 的组合来指定。下面在“授权”部分之后详细介绍了自定义 SOAP 标头选项,因为该解决方案既涉及身份验证又涉及授权。

Windows 身份验证

IIS 和 ASP.NET 都支持使用 Windows 内置的安全性对包括 Web 服务在内的 Web 应用程序进行身份验证。Windows 提供了三个身份验证选项:基本、摘要式和集成 Windows。此外,每个选项都可以与 SSL 一起使用。由于除了“基本”之外的所有 Windows 身份验证选项都以某种形式对数据加密,因此 SSL 提供的附加加密级别通常只与“基本”或“客户端证书”结合使用。

无论使用哪个 Windows 身份验证选项,设置 Web 服务和 Web 服务客户端的过程都是相似的。有关更多信息,请参见如何:将 XML Web services 配置为使用 Windows 身份验证。使用 Windows 身份验证时无需向 Web 服务中添加任何代码,因为身份验证选项在配置文件和 IIS 中设置。必须将用于向 Web 服务传递客户端凭据的代码添加至 Web 服务客户端。

如果选择 SSL 作为 Web 服务所用的身份验证机制的一部分,则需要使用 IIS 为承载 Web 服务的 Web 应用程序或 Web 服务本身配置 SSL。服务说明以及从服务说明生成的代理类将反映 Web 服务使用 SSL(如果使用 SSL 访问服务说明和服务帮助页)。服务说明中 Web 服务的 URL 将具有 https 前缀。有关设置 SSL 的更多信息,请参见 IIS 文档。

客户端证书身份验证

客户端证书可帮助为身份验证提供一种安全机制,因为需要客户端来发送称为客户端证书的电子文档,该客户端证书使用到 Web 服务器的 SSL 连接来标识客户端。在通过网络发送客户端证书中包含的客户端凭据时,SSL 连接会对这些凭据进行加密。客户端与 Web 服务器之间的通信使用客户端发送的加密密钥和 Web 服务器提供的密钥的组合来进行加密。一旦建立了通信,只有客户端和服务器计算机可以使用该 SSL 连接彼此进行通信。

可从证书颁发机构那里获取客户端证书,证书颁发机构可以是 Web 服务器本身,或是客户端与服务器之间的可信中介。一旦获取证书并将 Web 服务器配置为接受客户端证书后,客户端便可在调用 Web 服务时通过 SSL 连接向 Web 服务器发送客户端证书。有关客户端证书的更多信息,请参见 IIS 文档。有关为 Web 服务设置客户端证书身份验证的更多信息,请参见如何:将 XML Web services 配置为使用 Windows 身份验证

XML Web services 的授权选项

授权的用途是确定是否应向某一身份授予对给定资源的请求类型的访问权限。有两种基本方法可用来授予对给定资源的访问权限:文件授权和 URL 授权。只要使用 Windows 身份验证,就可以使用文件授权,因为权限是按文件在 IIS 中设置的。URL 授权可与 ASP.NET 支持的任何内置身份验证机制结合使用。使用 URL 授权时,通过配置文件进行配置,在这种情况下,可以有选择地向用户授予或拒绝对与 ASP.NET 关联的任何文件(包括 .asmx 文件)的访问权限。

有关按文件设置授权的更多信息,请参见 IIS 文档。

有关使用配置文件设置授权的更多信息,请参见 ASP.NET 授权

使用 SOAP 标头的自定义身份验证

Windows 身份验证机制(包括客户端证书)依赖于 HTTP 传输,而 SOAP 则与传输无关。使用 ASP.NET 生成的 Web 服务使用 SOAP over HTTP 以及返回非 SOAP XML 文档的 HTTP-POST 和 HTTP-GET 实现。因此,创建自定义身份验证机制的一个原因是为了将身份验证与传输分离。通过在 SOAP 标头中传递身份验证凭据可以实现此分离。

SOAP 标头是传递带外信息或与 Web 服务的语义无关的信息的极佳方式。SOAP 消息的 Body 元素包含用于 Web 服务方法所处理的 Web 服务操作的 in 和 out 参数,与之不同,Header 元素是可选元素,因此可由基础结构来处理。也就是说,由开发的基础结构进行处理,以提供自定义身份验证机制。

有关将 SOAP 标头用于身份验证的一种方法的说明,请参见如何:执行使用 SOAP 标头的自定义身份验证

若要将 SOAP 标头用于身份验证,Web 服务客户端需将预期的 SOAP 标头添加至 SOAP 请求并用客户端凭据来填充它,从而将其凭据发送至 Web 服务。若要使用 SOAP 标头身份验证,Web 服务必须执行两项操作:指定它期望包含身份验证凭据的 SOAP 标头,并向客户端授予对 Web 服务的访问权限。

另请参见

任务

如何:将 XML Web services 配置为使用 Windows 身份验证
如何:执行使用 SOAP 标头的自定义身份验证

参考

NetworkCredential
CredentialCache
X509Certificate

其他资源

保证 ASP.NET Web 应用程序的安全
使用 ASP.NET 生成 XML Web services