【问题标题】:WSO2 ESB Secured Proxy EndpointWSO2 ESB 安全代理端点
【发布时间】:2013-08-20 18:46:54
【问题描述】:

我将 ESB 与许多不同的代理一起使用。

其中一个是将消息发送到其他代理端点。所有代理都在 ESB 中。

目前这些端点代理不安全。我喜欢使用场景 1 作为他们的安全保障。 但是我怎样才能将消息发送到那些端点。这意味着:如何在代理配置中添加带有用户名和密码的安全标头,以便我可以使用用户“admin”和密码“admin”进行身份验证?

【问题讨论】:

    标签: security wso2 esb endpoint


    【解决方案1】:

    据我了解,您需要保护代理并将其转发到不安全的后端服务。

    为此,您可以尝试从 WSO2 ESB 管理控制台执行以下步骤。我从WSO2 ESB 4.7.0尝试过这个

    1. 添加pass through proxy service
    2. 从服务仪表板查看代理。
    3. 点击服务的“安全”。
    4. 为“启用安全性”选择“是”?
    5. 选择“用户名令牌”并单击下一步。你提到的场景1。这将使用带有用户名令牌的 WS-Security 标准。
    6. 您可以在这里选择“admin”组并点击“Finish”

    现在将为您的服务启用安全性。

    代理服务现在需要身份验证,您现在可以使用“admin”用户。 (或您添加的任何用户)。

    如果您使用的是 Java 客户端,使用带有 Rampart 模块的 Axis2 可能会更容易。这方面的例子很多。

    查看以下链接。

    http://blog.facilelogin.com/2008/11/security-policy-with-rampart.html(这里有一个简单的客户端)

    http://blog.thilinamb.com/2009/08/securing-web-service-with-username.html

    我使用 SoapUI 对此进行了测试。您可以从请求属性中传递用户名和密码。

    您的请求将类似于以下内容。

    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "POST /services/SimpleStockQuoteService.SimpleStockQuoteServiceHttpsSoap12Endpoint HTTP/1.1[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "Accept-Encoding: gzip,deflate[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "Content-Type: application/soap+xml;charset=UTF-8;action="urn:getQuote"[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "Content-Length: 1195[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "Host: isurup-ThinkPad-T530:8243[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "Connection: Keep-Alive[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "[\r][\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "<soap:Envelope xmlns:ser="http://services.samples" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://services.samples/xsd">[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "   <soap:Header><wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Timestamp wsu:Id="TS-63"><wsu:Created>2013-08-20T19:45:32Z</wsu:Created><wsu:Expires>2013-08-20T21:08:52Z</wsu:Expires></wsu:Timestamp><wsse:UsernameToken wsu:Id="UsernameToken-62"><wsse:Username>admin</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</wsse:Password><wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">WG8iV7vik8QqZkzlaIabWg==</wsse:Nonce><wsu:Created>2013-08-20T19:45:32.861Z</wsu:Created></wsse:UsernameToken></wsse:Security></soap:Header>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "   <soap:Body>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "      <ser:getQuote>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "         <ser:request>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "            <xsd:symbol>WSO2</xsd:symbol>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "         </ser:request>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "      </ser:getQuote>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "   </soap:Body>[\n]"
    Wed Aug 21 01:15:32 IST 2013:DEBUG:>> "</soap:Envelope>"
    

    更新 如果后端服务也是安全的,可以参考下面的博文。

    http://soasecurity.org/2012/11/05/how-to-invoke-secured-backend-service-using-wso2-esb/

    【讨论】:

    • 不,后端服务也是安全的。这就是问题。我知道如何将消息发送到不安全的后端服务,但不知道如何将它们发送到安全的后端服务。
    • 哦,好吧。我首先了解到后端服务是不安全的。我更新了我的答案,以便您可以参考有关通过 ESB 调用安全后端服务的博客文章。
    • 在这篇博文中,他们使用通过代理和证书。我需要一个自定义代理,并且只需要用户名令牌 :(
    • 嗨 muetze,我希望以下博客文章中的 #2 对您有所帮助。 ssagara.blogspot.com/2013/07/…
    • 这似乎是完美的答案! +1
    【解决方案2】:

    在调用代理服务中可以配置如下属性,

    <property name="Authorization"
                   expression="fn:concat('Basic ', base64Encode('admin:admin'))"
                   scope="transport"
                   type="STRING"/>
    

    这样,basicAuth 标头将设置在对被调用代理服务的请求中。 希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可以简单地使用 curl 来调用安全代理服务,如下所示。

      curl -k --basic -u admin:admin https://localhost:8243/services/PoxSecurityProxy.POXSecurityProxyHttpsSoap11Endpoint/echoString?in=Chanaka
      

      【讨论】:

        【解决方案4】:

        在您的场景中,您需要使用代理服务调用安全后端(另一个代理服务)。为此,您需要编写安全策略。请参阅 [1] 篇博文。

        [1]http://soasecurity.org/2012/11/05/how-to-invoke-secured-backend-service-using-wso2-esb/

        【讨论】:

        • 抱歉,本示例使用的是直通代理。我需要一个自定义代理,它将消息发送到另一个自定义代理。我也使用 UsernameToken 并且没有证书。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        相关资源
        最近更新 更多