WSO2 ESB在绑定层次结构中应用安全策略

时间:2012-04-09 08:26:23

标签: security binding wso2 wso2esb policy

我正在尝试将多个安全策略应用于WSO2 ESB 4.0.3中定义的代理服务。 我需要在操作级别应用一个策略,在消息级别应用其他策略。

我使用源视图直接定义代理服务,而不是使用Web UI /策略编辑器。

我尝试按照此处所述定义每个政策:

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>

3 个答案:

答案 0 :(得分:2)

您可以通过策略编辑器编辑策略,以将策略应用于绑定层次结构中的不同策略主题。您可以参考Securing request and response messages with different security policies,其中介绍了演示如何将不同的安全策略应用于进出邮件的示例。

此示例直接编辑axis2服务的services.xml

如果您通过ESB的策略编辑器更改策略并保存,则会获得相同的效果。

如果它仍然不适合您,请附上已编辑的policy.xml和生成的wsdl,这将有助于更深入地了解该问题。

答案 1 :(得分:2)

WSO2 ESB支持此功能。

实际上问题在于您尝试使用的邮件级别策略。您正在尝试提供Policy Attachment元素,而不是策略元素。如果您尝试通过其services.xml将多个策略引用到Axis2服务,则此方法有效。但是如果您使用Carbon策略编辑器,它希望您提供有效的策略元素。

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

<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>

希望这有帮助!

答案 2 :(得分:0)

经过一些研究,我发现了一些潜在的解决方案,并希望与您分享。

问题1:无法在粒度级别应用安全策略。

解决方案:

我可以在

应用安全政策

1。)根级别

2。)操作级别和

3.。消息级别

使用 operationName &amp; 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,并且我们有限制/无控制来自定义它。

解决方案: 使用Property 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应用内置安全策略或策略名称与内置策略之一匹配时,它将仅显示安全