分享
 
 
 

揭开WebLogicWeb服务安全性的面纱

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

安全性是我们大多数客户优先考虑的问题。随着越来越多的客户采用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

<servlet>

<servlet-name>sender</servlet-name>

<servlet-class>

weblogic.soap.server.servlet.DestinationSendAdapter

</servlet-class>

<init-param>

<param-name>topic-resource-ref</param-name>

<param-value>senderDestination</param-value>

</init-param>

<init-param>

<param-name>connection-factory-resource-ref</param-name>

<param-value>senderFactory</param-value>

</init-param>

</servlet>

...

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

<url-pattern>/sendMsg</url-pattern>

保护RPC风格的Web服务

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

<security-constraint>

<web-resource-collection>

<web-resource-name> Weather</web-resource-name>

<url-pattern>/weatherturi/*</url-pattern>

</web-resource-collection>

<auth-constraint>

<role-name>Admin</role-name>

</auth-constraint>

</security-constraint>

<login-config>

<auth-method>BASIC</auth-method>

</login-config>

<security-role>

<role-name>Admin</role-name>

</security-role>

清单3

<security-role-assignment>

<role-name>Admin</role-name>

<principal-name>system</principal-name>

</security-role-assignment>

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 "<WSDL URL>", "<Service Name in WSDL>", "<Port Name in WSDL>"

Connect

Client.ConnectorProperty("AuthUser") = <username>

Client.ConnectorProperty("AuthPassword") = <password>

Client.<Service(args)>

不应该把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", "<username>" );

h.put("java.naming.security.credentials", "<password>" );

Context context = new InitialContext(h);

WebServiceProxy proxy = (WebServiceProxy)context.lookup(<WSDL_URL>);

SoapMethod method = proxy.getMethod("<method name>");

method.invoke(new Object[]{"<args>"});

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)。还可以在使用get<web service>port()获得端口的同时传送用户名和密码。 清单6

<Web Service Stub>._setProperty(Stub.USERNAME_PROPERTY, "<username>");

<Web Service Stub>._setProperty(Stub.PASSWORD_PROPERTY, "<password>");

MS C++ 客户端

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

"<UserName>";

Connector->Property["AuthPassword"] = "<Password>";

结束语

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有