2

我正在尝试将多个安全策略应用于 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>
4

3 回答 3

2

这由 WSO2 ESB 支持。

实际上,问题在于您尝试使用的消息级别策略。您正在尝试提供策略附件元素,而不是策略元素。如果您尝试通过其 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>

希望这可以帮助 !

于 2012-04-10T13:28:00.863 回答
2

您可以通过策略编辑器编辑策略,以将策略应用于绑定层次结构中的不同策略主体。您可以参考使用不同的安全策略保护请求和响应消息,该示例通过一个示例演示如何将不同的安全策略应用于输入和输出消息。

此示例直接编辑services.xmlaxis2 服务的。

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

如果它仍然不适合您,请附上编辑后的 ​​policy.xml 和生成的 wsdl,这将有助于提供对问题的更多见解。

于 2012-04-10T09:06:38.813 回答
0

在做了一些研究之后,我发现了一些潜在的解决方案,并希望与大家分享。

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

解决方案 :

我能够在

1.) 根级别

2.) 操作水平和

3.) 消息级别

使用operationNameoperationNamespace

<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:在 Source View 中直接编辑应用安全策略时,UI 仍然显示Unsecured。仅当通过 Web UI 应用内置安全策略或策略名称与内置策略之一匹配时,它才会显示Secured

于 2012-04-19T21:18:30.097 回答