我正在尝试将多个安全策略应用于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>
答案 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应用内置安全策略或策略名称与内置策略之一匹配时,它将仅显示安全