Rest 不同ESB产品上的安全HTTP代理

Rest 不同ESB产品上的安全HTTP代理,rest,authentication,wso2,mule,wso2esb,Rest,Authentication,Wso2,Mule,Wso2esb,我目前正在评估不同的ESB产品(事实上,我现在关注的是mule)。用例是代理一个简单的HTTP服务,一个OpenGIS Web映射服务WMS 以下是免费发布的WMS服务示例: 它使用关于服务的XML元数据响应“GetCapabilities”请求(http://www.wms.nrw.de/wms/uebersicht_nrw2?REQUEST=GetCapabilities&VERSION=1.1.1&SERVICE=WMS) 它使用包含“GetMap”请求映射的图像数据进行响应(http:

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

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

  • 它使用关于服务的XML元数据响应“GetCapabilities”请求(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=image/png&BBOX=2538900,565640026195005777000&宽度=200&高度=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>


Mule在认证和授权人员时依赖于Spring安全性

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

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

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

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


另外,我从配置中删除了
disableTransportTransformer=“true”
,因为这也会导致问题。

David,您的需求很长。让我澄清一下WSO2 ESB的一些要点,以便您可以开始

  • WSO2 ESB不仅支持SOAP,还支持多种传输和内容类型。您可能最感兴趣的是其余部分,可能还有JSON支持。和的链接可能会有所帮助

  • 所有WSO2服务器都可以插入外部目录服务

  • 您的所有要求都可以满足。您可以在上浏览全面的示例,以了解ESB可以做什么。我还要向您指出,、上的文章,这些文章将帮助您满足您的需求


  • 希望这能有所帮助。

    谢谢,我可以在我的项目中添加一个mule域并通过它进行身份验证。不幸的是,HTTP网桥在身份验证后不再响应(不知道在消息中添加身份验证头时为什么会发生这种情况)。在任何地方都有明确的代理由URL参数组成的HTTP消息的示例吗?显示您的配置和测试请求,以便我们可以进一步调查。嗨,Dave!我更新了我原来的问题。配置Spring安全性不再是一个问题,工作起来很有魅力,但我在使用我试图代理的这种特殊风格的WMS服务时遇到了问题。如果你能给我一些关于使用流或某种pettern来实现我的需求的建议,我将非常感激。Phew,我不得不跟踪HTTP请求以找出你的配置有什么问题。这是一个非常恶劣的一个!相应地检查了我的配置。耶!它工作得很好!我还认为MULE会话头可能会导致问题,但我不知道如何删除它。非常感谢你!现在Mule对我来说真的很有趣,因为我现在可以将它用作这些不安全的OpenGIS WMS和WFS服务标准的安全中间件层。太酷了!(顺便说一句,对不起,我没有足够的声誉来给这个答案打分,但我会尽快给它打分)嗨!非常感谢您的指导。当时我正在关注mule,但稍后我也将尝试使用wso2。再次您好Mathew!据我所知,WSO2在内部使用SOAP和WS-*标准进行中介(通过Apache Synapse中介)。它还能够定义RESTful(也是URLencoded请求?)入站端点,然后将消息转换为SOAP进行内部处理。但是,它是否也能够像上面的WMS服务那样代理一个简单的网页,以提供简单的XML或图像数据呢?我只希望ESB对客户端完全透明,然后向端点添加HTTP身份验证。它可以支持不同的协议,比如JMS、SMTP甚至不同的内容类型,可以是SOAP、XML、JSON或其他任何内容。它基于模块化架构。我不会深入讨论这个问题,但如果您对细节感兴趣,请查找传输接收器/发送器和消息生成器/格式化程序。不仅仅是URL编码的请求,还可以开发一个完整的RESTful接口。希望你能看完我指出的一些文章。