XML网络服务是Microsoft .NET 框架的基础之一,通过按照标准国际互联网协议很好定义的计划性的接口来为网络应用程序提供信息和服务......
对XML网络服务的访问限制
XML网络服务可以被实现,因此只有被授权的客户可以访问它们。为了限制对你的XML网络服务的访问,你需要一种鉴别客户的方法。那么,根据客户给出的信任状,你可以确定是否批准对服务的访问。
从根本上讲,保证一个XML网络服务的安全与保证网络站点的安全没有什么不同。但是代替批准终端用户访问你的站点,你将会批准计算机和商务来访问XML网络服务。
如果你确切指定哪个计算机需要访问你的XML网络服务,你就可以使用Internet Protocol Security (IPSec)或者防火墙来限制已知IP地址的计算机的访问。这项技术当你希望限制对一个私有网络中的计算机的访问时是很有用的。
但是,在大多数国际互联网情况下,你将不会知道你所有客户的IP地址。在这个情况下,最直接的实现鉴定方法就是增加用来交换消息的协议地鉴定特性。例如,如果你通过HTTP发送和接收SOAP消息,你就将添加HTTP可用的鉴别特性。Microsoft Internet Information Services 5.0版支持许多HTTP的鉴定机制(从www.microsoft.com/technet/iis/authmeth.asp可以得到更详细资料):
Basic |
用于无安全或半安全的客户鉴定。因为用户名称和密码用纯文本传送。如果证书与有效的用户记录匹配,Internet Information Services将允许对XML网络服务的访问。 |
Basic over SSL |
与Basic认证相同,除了用户名称和密码用Secure Sockets Layer (SSL)通过网络传送而不是用纯文本。虽然使用SSL在性能上有重大影响,但是还是一个用于国际互联网情况的很好选择。 |
Digest |
使用散列法,以一种安全的方式传送客户认证书。但是并不被除Microsoft Windows外的其他平台所广泛支持。如果证书与有效的用户记录匹配,Internet Information Services将允许对XML网络服务的访问。 |
Integrated Windows authentication |
只在局域网的情况有用。使用NTLM或Kerberos。不能用在代理服务器或其他防火墙的情况。如果证书与有效的用户记录匹配,Internet Information Services将允许对XML网络服务的访问。 |
Client certificates |
需要每个客户获得一个认证。认证被映射到用户帐户中,它可以被Internet Information Services 使用来授权访问XML网络服务。虽然现在使用数字认证还不广泛,但是一个用于国际互联网情况的可行选择。 |
另外一种选项是实现一种定制机制。例如,如果你发送SOAP消息,你可以定义你的XML网络服务约定,这样客户认证就可以在SOAP消息中自己传送了。使用这种方法,你需要从消息中找回认证并且实现你自己的授权逻辑,但是你可以使用你想用的任何种类的客户帐户数据库。你可以把客户认证当作SOAP头或SOAP中的元素来传送。
因为SOAP消息是XML,如果你使用像HTTP这样的协议来传送消息,客户认证将被按照纯文本传送。如果这是不可接受的,你应该使用SSL来代替HTTP。
注意使用SSL要比单独使用HTTP要慢很多,因此开发人员应该小心地在安全和性能间进行权衡。为一些XML网络服务发布的操作使用SSL是可能的,而在安全不是很紧要的情况下为操作使用轻量级的技术。
如果为所有安全操作使用SSL的超高的性能负载是不能接受的,其他授权选择就被用到SOAP RPC协定中,并且在你的XML网络服务上定义特殊的登陆操作,它把认证作为SOAP主体的元素接收,并且返回一个通话钥匙。只有登陆方法将会需要通过SSL发送。其他消息可以通过HTTP发送,包括或者在SOAP头或者在SOAP主体中的通话钥匙。这种方法冒着通话钥匙被劫持的危险性,但是减小了客户的代码被偷的危险性。
你也许会怀疑是否Microsoft Passport会被使用来限制对XML网络服务的访问。从理论上来说,Passport应该被使用来为一个XML网络服务的客户授权。但是,Passport现在把注意力集中于对终端用户授权,而不是应用程序、计算机或商业。所以,实际上,你会发现潜在的客户没有并且也不希望去获得一个Passport。
一些XML网络服务将需要为终端用户授权。在这种情况下,你会希望Microsoft Passport可以使用。但是在Passport的现在的执行情况来看,如果网站在终端用户的利益上调用你的服务,这里就没有安全的方法使用户输入他的Passport用户ID和密码,而让XML网络服务去验证用户是否已经登陆(并且获得用户的面貌特征,如果需要)。通常,如果XML网络服务想要对一个今天的终端用户授权,它必须依靠客户网站来通过用户的认证。