通过不同的ESB产品保护HTTP代理

时间:2012-05-13 19:10:29

标签: rest authentication wso2 mule wso2esb

我目前正在评估不同的ESB产品(事实上我现在正专注于mule)。用例是代理一个简单的HTTP服务,一个OpenGIS Web制图服务WMS。

以下是免费发布的WMS服务的示例:

  • 它针对“GetCapablities”请求的服务的XML元数据做出响应(http://www.wms.nrw.de/wms/uebersicht_nrw2?REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS)
  • 它响应包含“GetMap”请​​求的地图的图像数据(http://www.wms.nrw.de/wms/uebersicht_nrw2?REQUEST=GetMap&VERSION=1.1.1&SERVICE=WMS&LAYERS= Uebersicht&安培; SRS = EPSG:31466&安培; FORMAT =图像/ PNG&安培; BBOX = 2538900,5656400,2619500,5777000&安培; WIDTH = 200安培; HEIGHT = 200安培;花柱=安培;)

两者都将其数据作为字节数组返回,这可能是我正在处理的问题。

我可以通过Mule ESB代理它之后,我想添加如下安全功能:

  • HTTP基本和摘要式身份验证
  • 通过TLS客户端证书进行身份验证
  • 实施XACML政策执行点
  • 提供审计服务的一些使用情况统计信息,并对其实施一些QoS和限制。

但基本上代理本身并不像我想要的那样工作。这是我到目前为止所得到的。首先,我尝试使用流代理它以在入站地址添加安全提供程序。但请求似乎没有通过出站地址,响应是空的。

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:pattern="http://www.mulesoft.org/schema/mule/pattern" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mule-ss="http://www.mulesoft.org/schema/mule/spring-security" xmlns:ss="http://www.springframework.org/schema/security" version="CE-3.2.1" xsi:schemaLocation="...cut..."
<mule-ss:security-manager>  
    <mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authenticationManager"/> 
</mule-ss:security-manager>
<spring:beans>
    <ss:authentication-manager alias="authenticationManager">  
        <ss:authentication-provider> 
            <ss:user-service id="userService"> 
                <ss:user name="ross" password="ross" authorities="ROLE_ADMIN"/>  
                <ss:user name="anon" password="anon" authorities="ROLE_ANON"/> 
            </ss:user-service> 
        </ss:authentication-provider> 
    </ss:authentication-manager>
</spring:beans>
<http:connector name="NoSessionConnector">
    <service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>
<flow name="wfsFlow1" doc:name="wfsFlow1" processingStrategy="synchronous">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="wms" responseTimeout="10000000" doc:name="Geoserver OWS">
        <mule-ss:http-security-filter realm="mule-realm"/>
    </http:inbound-endpoint>
    <http:outbound-endpoint exchange-pattern="request-response" method="GET" address="http://www.wms.nrw.de/wms#[header:INBOUND:http.request]" encoding="UTF-8" disableTransportTransformer="true" responseTimeout="1000000" doc:name="Geoserver OWS"/>
</flow>
</mule>

我认为问题是WMS服务作为字节数组的响应。我尝试了不同的repsonse变换器从字节数组转换为字符串或html响应,但它没有用。

我也尝试过桥接模式,但它没有像我预期的那样提供GET操作的参数,而是通过POST提供,而底层的WMS服务不接受。

我认为我的用例非常简单,但是我试图在四周后实现它。我做了这些供应商提供的每个示例教程,但我无法使用任何类型的身份验证设置简单的HTTP参数服务。

有没有人对这些产品有任何经验,或者很高兴回答一些关于如何在任何这些产品上设置身份验证的HTTP代理的具体问题。

非常感谢!

2 个答案:

答案 0 :(得分:2)

大卫,你的要求很长。让我澄清一下WSO2 ESB上的一些要点,以便您可以开始使用。

  1. WSO2 ESB支持各种传输和内容类型,而不仅仅是SOAP。您可能对REST以及可能的JSON支持最感兴趣。 herehere的链接可能有所帮助。

  2. 所有WSO2服务器都可以插入外部目录服务。 Click here for instructions

  3. 可以涵盖您的所有要求。您可以在this location查看综合样本,以了解ESB可以执行的操作。我还要指出hereherehereherehere中可以帮助您满足要求的文章。

  4. 希望这有帮助。

答案 1 :(得分:0)

在对人员进行身份验证和授权时,Mule依赖于Spring Security。

Configuring Security是处理Mule安全性的文档入口点。您将找到有关配置Spring Security,保护组件(如HTTP桥)和LDAP身份验证的信息。

默认情况下,Mule在执行出站请求时将其会话序列化为HTTP标头。如果远程站点不受信任,这不仅可能是安全问题,而且还可能导致错误请求问题,因为序列化会话会产生过大的HTTP标头。

知道当存在安全上下文时,Mule会话变得相当大,这可能会导致问题。事实上,使用您的配置,我从远程测试站点收到了错误的请求错误!所以我添加了以下内容以确保Mule不通过HTTP发送请求:

<http:connector name="NoSessionConnector">
    <service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>

我还从配置中删除了disableTransportTransformer="true",因为这也会导致问题。