论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
揭开WebLogic Web服务安全性的面纱
 作者:佚名     2007-3-14 17:16:13        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

安全性是我们大多数客户优先考虑的问题。随着越来越多的客户采用Web服务,他们发现,他们需要了解如何保护Web服务,以及使用何种身份验证机制。为了保持Web服务的开放性并支持多种客户端类型,就必须了解如何处理Web服务的安全性问题。

  本文深入幕后探讨了WebLogic Web服务的安全性问题。我将阐明如何保护WebLogic Web服务,身份验证如何工作,以及如何使用各种编程语言开发客户端来为WebLogic Web服务提供身份验证。

  WebLogic Web 服务组件

  以WebLogic Server作为宿主的Web服务是使用标准的J2EE组件(比如EJB和JMS)来实现的,并且作为标准的J2EE企业应用程序来打包。WebLogic Web服务使用简单对象访问协议(Simple Object Access Protocol ,SOAP)1.1作为消息格式,并使用HTTP 1.1作为连接协议。

  Web服务运行时组件是一组创建Web服务所需的servlet和相关的基础架构。运行时的元素之一是一组用于处理来自客户端SOA请求的servlet。这些servlet包含在WebLogic Server发布中。运行时的另一个元素是Ant任务,它负责生成和组装WebLogic Web服务的所有组件。

  WebLogic Web服务作为标准的J2EE企业应用程序来打包,它由以下特殊组件组成:

  • 一个Web应用程序至少包含一个servlet,用于发送SOAP消息给客户端和接收来自客户端的SOAP消息。它作为Web服务开发过程的一部分而自动被包括在内。
  • 一个无状态会话EJB,用于为消息风格的Web服务实现RPC风格的Web服务或JMS监听程序(比如消息驱动bean)。

  在一个RPC风格的Web服务中,无状态会话EJB可以完成Web服务的所有实际工作,或者它们可以把工作分配给其他EJB。Web服务的实现者决定哪些EJB完成实际工作。在消息风格的Web服务中,J2EE对象(通常是消息驱动bean)从JMS目的地获取消息,并且处理它们。WebLogic Web服务作为企业存档(.ear)文件打包,其中包含Web应用程序的Web存档(.war)文件和EJB存档(.jar)文件。

  保护WebLogic Web 服务

  因为WebLogic Web服务作为标准的J2EE企业应用程序打包,所以通过保护组成Web服务的以下标准J2EE组件中的一些或全部,来保护对Web服务的访问:

  • SOAP servlet
  • RPC风格的Web服务基于无状态会话EJB。可使用基本的HTTP身份验证或SSL对尝试访问WebLogic Web服务的客户端进行身份验证。因为前述组件均为标准的J2EE组件,因此可以使用标准的J2EE安全过程来保护它们。

  保护消息风格的Web服务

  可以通过保护负责处理客户端和服务之间SOAP消息的SOAP servlet,来保护消息风格的Web服务。

  不论是手动还是使用wsgen Ant任务来组装Web服务时,您都可以在Web应用程序的web.xml文件中引用SOAP servlet。这些servelet负责处理在WebLogic Server和客户端应用程序之间传递的SOA消息。它们始终部署在WebLogic Server上,并为所有部署的WebLogic Web服务所共享。

  Web服务引用哪个特定SOAP servlet取决于它的类型(RPC风格还是消息风格)。下面列出了对每个SOAP servlet的描述:

  • weblogic.soap.server.servlet.DestinationSendAdapter: 在负责接收来自客户端应用程序的数据并把这些数据发送给JMS目的地的消息风格的Web服务中处理SOAP消息。
  • weblogic.soap.server.servlet.QueueReceiveAdapter: 在负责把数据从JMS队列发送给客户端应用程序的消息风格的Web服务中处理SOAP消息。
  • weblogic.soap.server.servlet.TopicReceiveAdapter: 在负责把数据从JMS主题发送给客户端应用程序的消息风格的Web服务中处理SOAP消息。
  • weblogic.soap.server.servlet.StatelessBeanAdapter: 处理RPC风格的Web服务和客户端应用程序之间的SOAP消息。
    例如,在客户端应用程序用来发送数据给JMS目的地的消息风格的Web服务中,负责处理SOAP消息的SOAP servlet是weblogic.soap.server.servlet.DestinationSendAdapter。用于组装Web服务的wsgen Ant任务把清单1中所示的元素添加到Web应用程序的web.xml部署描述器。
   清单1
sender weblogic.soap.server.servlet.DestinationSendAdapter topic-resource-ref senderDestination connection-factory-resource-ref senderFactory ...

   为了限制对DestinationSendAdapter SOAP servlet的访问,您首先定义一个角色,并把它映射到安全域中的一个或多个主体,然后通过把web-resources-collection元素中的如下url-pattern元素添加到Web应用程序的web.xml部署描述器,指定把该安全约束应用到该SOAP servlet。

  /sendMsg

  保护RPC风格的Web服务

  您可以限制对RPC风格的Web服务的访问,具体方法是限制对实现Web服务或SOAP servlet的无状态会话EJB的访问。清单2和3显示了如何设置web.xml和weblogic.xml文件以保护SOAP servlet。确保客户端仍然能够访问WSDL文件。为了确保这一点,应避免使用通配符映射;而是显式地保护SOAP servlet适配器路径。这两个清单提供了一个如何保护帐户管理程序代理Web服务的例子。正如您所看到的那样,角色是在web.xml中定义的,并与域中的组相关联。

  清单2       Weather  /weatherturi/*      Admin        BASIC      Admin  
  清单3    Admin  system  

  Web 服务客户端

  为了理解如何处理Web服务客户端的安全性问题,必须要理解SOAP和HTTP身份验证的工作方式。

  SOAP身份验证

  Web服务使用SOAP协议,它是以一些底层传输机制为基础而实现的高级消息传送协议。Web服务安全性仍然是一个新兴领域,围绕SOAP规范出现了一些扩展,以支持安全功能。当前,SOAP使用的是针对身份验证的底层传输协议基础架构。所以,WebLogic Server SOAP间接地使用了HTTP 1.1身份验证。

  HTTP身份验证

  使用HTTP的用户身份验证方法十分简单。因为HTTP是一个无状态协议--也就是说,一旦请求完成之后,服务器不会记住关于该请求的任何信息--浏览器需要为每个请求重新发送用户名和密码(参见图1)。


图1

  第一次访问需验证的资源时,服务器将返回401状态(“Unauthorized”),并包括一个WWW身份验证的响应头,用于指明所使用的域名和身份验证模式。然后,浏览器应该要求用户输入用户名和密码。接着,它再次请求同样的资源,这次包括了一个含有模式名(“Basic”)的身份验证头,以及输入的用户名和密码。服务器检查此用户名和密码,如果它们是有效的,就会返回相应的页面。如果密码对于该用户无效,或者用户没有访问权限,服务器还会像以前一样返回401状态。然后,浏览器可以要求用户尝试重新输入用户名和密码。

  假定用户名和密码有效,接下来用户可能会请求一个受保护的资源。在这种情况下,服务器将使用401状态作为响应,而浏览器能够使用用户和密码详细信息再次发送请求。这样做会很慢,然而对于随后的请求,浏览器就会改为发送身份验证头。要了解HTTP身份验证方面的更多信息,请参考W3C HTTP Working Group RFC 2617 (www.w3c.org/Protocols/Specs.html)。

  客户端类型

  虽然前面的部分着重于浏览器客户端,但是协议对于任何类型的客户端都是相同的。任何需要访问受保护的Web服务的客户端都要理解这个HTTP身份验证协议,并实现它以求通过身份验证。这个部分说明了如何传送来自各种类型客户端的身份验证信息。

  MS Visual Basic 客户端

  Microsoft为传输层提供HTTPConnector接口。它使用两个属性来传递证书--AuthUser 和AuthPassword。清单4显示了一个使用Visual Basic和MS SOAP Toolkit 2.0调用一个受保护的WebLogic Web服务的例子。

  清单4  Set Client = New SoapClient   Client.mssoapinit  "", "", ""  Connect  Client.ConnectorProperty("AuthUser") =   Client.ConnectorProperty("AuthPassword") =   Client.

  不应该把AuthUser 和AuthPassword与ProxyUser 和ProxyPassword相互混淆。它们用于为代理服务器提供证书(如果存在证书的话)。这种身份验证的工作方式是一样的,除了返回的错误号是407,而不是401。

  Java客户端

  WebLogic Server提供Java客户端库来访问受保护的资源。用户名和证书是使用"java.naming.security.principal"和 "java.naming.security.credentials"来传送的。清单5描述了Java客户端如何使用WebServiceProxy来调用一个受保护的WebLogic Web服务。

  清单5  Properties h = new Properties();  h.put(Context.INITIAL_CONTEXT_FACTORY,  "weblogic.soap.http.SoapInitialContextFactory");  h.put("java.naming.security.principal", "" );  h.put("java.naming.security.credentials", "" );  Context context = new InitialContext(h);  WebServiceProxy proxy = (WebServiceProxy)context.lookup();  SoapMethod method = proxy.getMethod("");  method.invoke(new Object[]{""});

  JAX-RPC客户端

  JAX-RPC(Java API for XML-based remote procedure calls,用于基于XML的远程过程调用的Java API)是2002年6月发布的新标准,它定义了用于调用Web服务的API。WebLogic Server 7.0 支持 JAX-RPC。JAX-RPC接口"Stub"和 "Call"均支持属性”javax.xml.rpc.security.auth.username" 和 "javax.xml.rpc.security.auth.password",身份验证信息就是借助这两个属性进行传送的。您还可以使用静态常量Stub.USERNAME_PROPERTY 和Stub.PASSWORD_PROPERTY在调用服务之前设置安全性信息(参见清单6)。还可以在使用getport()获得端口的同时传送用户名和密码。

  清单6  ._setProperty(Stub.USERNAME_PROPERTY, "");  ._setProperty(Stub.PASSWORD_PROPERTY, "");

  MS C++ 客户端

  类似地,您可以使用厂商提供的API编写C/C++客户端。MS SOAP工具包可以用于编写Windows平台上的C++客户端。用户名和密码是使用Connector Property进行传送的。下面是一个设置用户名和密码的例子。

  Connector->Property["AuthUser"] =  "";  Connector->Property["AuthPassword"] =  "";

  结束语

  本文讨论了用于WebLogic Web服务和保护Web服务组件的身份验证。因为Web服务是涉及到不同技术的异构环境的自然选择,必须了解如何使用各种类型的客户端访问受保护的Web服务。


责任编辑:lss
  相关新闻
JSFToolbox--用Dreamweaver开发JSF
WebWork拦截器(Interceptor)使用方法
允许内部用户使用Outlook Web Access
Web2.0时代的核心应用:Ajax简介
反流氓软件走向web2.0 奇虎将判定权移交网民
EasyJWeb 关于中文件上传的处理实例
Thinking in AJAX(二) —— WEB设计
Web框架趣谈之Java Web 框架的甜点
简易使用Apache Web让你的JSP“动”起来
模板引擎的设计思想最早由Webmacro提出(3)
反流氓软件走向web2.0 奇虎将判定权移交网民
比较 RIFE 与其他 Web Frameworks
EasyJWeb 关于中文件上传的处理实例
Web框架趣谈之Java Web 框架的甜点
Web2.0时代的核心应用:Ajax简介
Thinking in AJAX(二) —— WEB设计
XMLHttpRequest在Web开发利弊
用WebWork,JSP,Velocity建立注册页面
使用Struts和Velocity开发web应用
模板引擎的设计思想最早由Webmacro提出(3)
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号