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

来源:互联网 发布:orcale数据库字典原理 编辑:程序博客网 时间:2024/05/22 12:11
 
保证使用 ASP.NET 创建的 XML Web 服务的安全

要决定哪个安全实现最适合 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 应用程序以及生成安全的 ASP.NET 应用程序:身份验证、授权和安全通信ASP.NET Web 应用程序安全

有关从基于 ASP.NET 的应用程序访问远程资源的更多信息,请参见 Building Secure ASP.NET Applications 第 3 章中的“Impersonation/Delegation Model”和“Trusted Subsystem Model”主题(英文)。

XML Web 服务的身份验证选项

使用 ASP.NET 创建的 Web 服务具有多个选项用来对客户端进行身份验证,因此,重要的问题便是哪一个适合于特定的 Web 服务。在选择合适的安全选项时,开发人员必须在安全级别和性能级别之间作出选择。对于某些 Web 服务而言,使用加密方法通过网络发送客户端凭据至关重要,因此必须使用对客户端凭据进行加密的算法。例如,编写处理信用卡的 Web 服务的开发人员可能更担心客户端凭据被盗用,而不是加密信用卡数据所造成的额外的系统开销。

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

身份验证选项的总结
身份验证选项 说明

Windows - 基本

用于客户端的不安全标识,因为用户名和密码是以纯文本的 Base64 编码字符串格式发送的。在此类身份验证中,对密码和用户名进行编码,但不进行加密。一个蓄意破坏的用户可以使用网络监视工具截获用户名和密码。

Windows - 基本(通过 SSL)

用于 Internet 方案中客户端的安全标识。用户名和密码使用安全套接字层 (SSL) 加密(而不是纯文本)通过网络进行发送。此方法相对容易配置,适合 Internet 方案。但是,使用 SSL 会降低性能。

Windows - 简要

用于 Internet 方案中客户端的安全标识。使用哈希算法以加密的方式传输客户端凭据,这样,密码将不以明文形式传输。另外,简要身份验证可以通过代理服务器工作。但是,在其他平台上并不是广泛支持该方法。

Windows - 集成 Windows

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

Windows - 客户端证书

用于 Internet 和 Intranet 方案中客户端的安全标识。要求每个客户端都从互相信任的证书颁发机构获得证书。可以将证书映射到用户帐户,IIS 使用该用户帐户授予对 Web 服务的访问权限。

窗体

Web 服务不支持。这是一个系统,通过该系统,使用 HTTP 客户端重定向将未经身份验证的请求重定向到某个 HTML 窗体。Web 服务的大多数客户端不希望提供使用 UI 的凭据;如果要使用窗体身份验证,必须解决此问题。

SOAP 头 – 自定义

用于安全和不安全的 Internet 方案。用户凭据在 SOAP 消息的 SOAP 头中传递。Web 服务器提供自定义的身份验证实现,与承载该 Web 服务的平台无关。

对于上面列出的所有选项,除了使用 SOAP 头之外,安全设置都是使用配置文件和 IIS 的组合指定的。有关配置文件的更多信息,请参见 ASP.NET Configuration。在“授权”一节之后对自定义 SOAP 头选项进行详细说明,这是因为该解决方案既涉及身份验证又涉及授权。

Windows 身份验证

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

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

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

客户端证书身份验证

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

可以从证书颁发机构获得客户端证书,证书颁发机构既可以是 Web 服务器本身,也可以是客户端和服务器之间受信任的中介。一旦获得证书且 Web 服务器已配置为接受客户端证书,客户端就可以在调用 Web 服务时,通过 SSL 连接向 Web 服务器发送客户端证书。有关客户端证书的更多信息,请参见 IIS 文档。有关为 Web 服务设置客户端证书身份验证的更多信息,请参见如何:为 Windows 身份验证配置 XML Web 服务

XML Web 服务的授权选项

授权的目的是确定是否应该授予某个标识对给定资源所请求的访问权限类型。有两种基本方式来授予对给定资源的访问权限:文件授权和 URL 授权。因为权限是在 IIS 中逐个文件设置的,所以只要使用 Windows 身份验证,就可以使用文件授权。URL 授权可以和 ASP.NET 支持的任何内置身份验证机制一起使用。使用 URL 授权,配置是通过配置文件完成的,用户可以有选择地授予或拒绝对与 ASP.NET 关联的任何文件(包括 .asmx 文件)的访问权限。

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

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

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

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

要传递与 Web 服务的语义无关的带外数据或信息,SOAP 头是一种非常好的方式。与 SOAP 消息的 Body 元素(后者包括 Web 服务方法处理的 Web 服务操作的输入和输出参数)不同,Header 元素是可选的,因此可以由基础结构进行处理。换句话说,就是由为提供自定义身份验证机制而开发的基础结构进行处理。

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

要使用 SOAP 头进行身份验证,Web 服务客户端会将其凭据发送给 Web 服务,方法是将期望的 SOAP 头添加到 SOAP 请求并使用客户端凭据进行填充。要使用 SOAP 头身份验证,Web 服务必须完成两项任务:指定期望获得包含身份验证凭据的 SOAP 头和授予客户端对 Web 服务的访问权限。