2012-04-09 49 views
2

我試圖將多個安全策略應用於WSO2 ESB 4.0.3中定義的代理服務。 我需要在操作級別應用一個策略,在消息級別應用其他策略。WSO2 ESB在綁定層次結構上應用安全策略

我正在使用源視圖直接定義代理服務,而不是使用Web UI/Policy Editor。

我試圖定義每個政策如下所述:

http://docs.wso2.org/display/ESB403/Policies+for+Service

,但生成的WSDL顯示它在錯誤的層次結構得到應用。

如果WSO2 ESB支持此功能,或者我做錯了,請指教!

我的代理

<proxy name="StockQuoteProxy" transports="https http" startOnLoad="true" trace="disable"> 
    <target endpoint="SimpleStockQuoteService_noSuspendOnFailure_TCPMon"> 
     <inSequence> 
      <header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" name="wsse:Security" action="remove"/> 
     </inSequence> 
     <outSequence> 
      <send/> 
     </outSequence> 
    </target> 
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_3.wsdl"/> 
    <policy key="sec_operation-Policy"/> 
    <policy key="sec_InOut-Policy"/> 
    <enableSec/> 
</proxy> 

我的消息級別政策

<wsp:PolicyAttachment wsu:Id="Service_message_policy_attachment" 
      xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
      xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
      xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
<wsp:AppliesTo> 
<policy-subject identifier="binding:soap11/operation:getQuote/in"/> 
<policy-subject identifier="binding:soap12/operation:getQuote/in"/> 
</wsp:AppliesTo> 
<wsp:Policy wsu:Id="Service_message_policy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sp:SignedParts> 
       <sp:Body /> 
       <sp:Header Name="To" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="From" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="FaultTo" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="ReplyTo" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="MessageID" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="RelatesTo" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="Action" 
        Namespace="http://www.w3.org/2005/08/addressing" /> 
      </sp:SignedParts> 
      <sp:EncryptedParts> 
       <sp:Body /> 
      </sp:EncryptedParts> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 
</wsp:PolicyAttachment> 
+0

當然支持此功能。可能是你錯過了一些東西或看到了錯誤。爲了澄清,「操作級別」是指綁定操作級別,對嗎? – 2012-04-10 07:48:15

+0

是的,這是正確的 – 2012-04-12 21:46:09

+0

我試圖找到一種方法來將多個安全策略應用於不同的策略主題,而無需通過WSO2 ESB策略編輯器進行手動編輯。我期待着有可能通過Synapse配置語言來定義它。 – 2012-04-12 22:05:57

回答

2

您可以通過編輯策略編輯器的策略,該策略適用於不同的政策課題在結合層次。您可以參考Securing request and response messages with different security policies,它演示了一個演示如何將不同安全策略應用於輸入和輸出消息的示例。

此示例直接編輯軸2服務的services.xml

如果您通過ESB的策略編輯器更改策略並保存,您將獲得相同的效果。

如果它仍然不適合你,請附上編輯過的policy.xml和產生的wsdl,這將有助於更深入地瞭解問題。

+0

謝謝你給我指出正確的例子。我正試圖在單個WSDL中通過WSO2 ESB公開後端安全Web服務中的每個端點引用(EPR)來實現類似的多策略綁定。使用ESB,我想根據傳入的安全令牌(UT或X509)修改並將傳入請求路由到適當的後端服務端點。 目標是配置我的STS代理,它將公開類似於以下WSDL的WSDL http://svn.apache.org/repos/asf/cxf/trunk/services/sts/sts-war/src/main/webapp /WEB-INF/wsdl/ws-trust-1.4-service.wsdl – 2012-04-12 21:54:10

+0

我注意到WSO2 ESB自動生成代理端點(http https soap sopa12)。我如何控制這些端點的生成?在我的情況下,我需要爲每個策略一個,所有應該是HTTP。 --- 根據您的解釋,我明白,使用Synapse配置語言在綁定層次結構中將不同的策略主題應用於多個安全策略是不可能的。我會通過策略編輯器嘗試。 – 2012-04-12 21:54:30

2

這由WSO2 ESB支持。

實際上問題出在您嘗試參與的消息級別策略。您正試圖提供策略附件元素,而不是策略元素。如果您嘗試通過其services.xml將多個策略引用到Axis2服務,則此方法有效。但是,如果您使用碳策略編輯器,則希望您提供有效的策略元素。

以下策略元素可以從您使用的策略附件元素派生。

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Service_message_policy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
       <sp:Body /> 
       <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" /> 
       <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" /> 
      </sp:SignedParts> 
      <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> 
       <sp:Body /> 
      </sp:EncryptedParts> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 

希望這有助於!

+0

感謝您的重播。 – 2012-04-12 20:14:57

0

經過一番研究,我發現了一些潛在的解決方案,並希望與您分享。

問題1:無法應用粒度級別的安全策略。

解決方案:

我能夠在

1)根級別

2)操作水平和

3到應用安全策略。),使用消息級別

operationName & operationNamespace

<proxy name="StockQuoteProxy" transports="https http" startOnLoad="true" trace="disable"> 
    <target endpoint="SimpleStockQuoteService_noSuspendOnFailure_TCPMon"> 
     <inSequence> 
      <header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" name="wsse:Security" action="remove"/> 
     </inSequence> 
     <outSequence> 
      <send/> 
     </outSequence> 
    </target> 
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_3.wsdl"/> 
    <!-- Default policy for all operations --> 
    <policy key="sec_SigOnly"/> 
    <!-- policy for getFullQuote operation , in and Out message --> 
    <policy key="SigEncrSTS" operationName="getFullQuote" operationNamespace="http://services.samples"/> 
    <!-- policy for getQuote operation , in message --> 
    <policy key="sec_InOut-Policy" operationName="getQuote" operationNamespace="http://services.samples" type="in"/> 
    <enableSec/> 
</proxy> 

問題2:當一個代理服務被部署,發佈的WSDL是自動生成的,我們具有有限的/無控制來定製它。

解決方案: 使用屬性useOriginalwsdl,我能夠發佈最初提供的WSDL只有IP /端口改爲代理IP /端口。

<proxy name="STSProxy" transports="https http" startOnLoad="true" trace="disable"> 
    <target endpoint="PingSTS_UT"> 
     <inSequence> 
      <property name="preserveProcessedHeaders" value="true" scope="default"/> 
      <log level="full"/> 
     </inSequence> 
     <outSequence> 
      <send/> 
     </outSequence> 
    </target> 
    <publishWSDL key="wsdl_sts"/> 
    <parameter name="useOriginalwsdl">true</parameter> 

我希望WSO2支持同時應用這兩種解決方案。即能夠控制如何生成已發佈的WSDL並在粒度級別應用安全策略。

PS:當通過在源視圖中直接編輯應用安全策略時,UI仍顯示不安全。它將只顯示安全通過Web UI應用內置安全策略或者策略名稱與內置策略之一匹配時