2012-04-09 5 views
2

WSO2 ESB 4.0.3에 정의 된 프록시 서비스에 여러 보안 정책을 적용하려고합니다. 운영 수준과 메시지 수준에서 하나의 정책을 적용해야합니다.바인딩 계층에서 보안 정책을 적용한 WSO2 ESB

웹 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

이 기능은 물론 지원됩니다. 뭔가를 놓치거나 버그를 보았을 수도 있습니다. 명확하게하기 위해, "operation level"에 의해 바인드 작업 레벨을 의미하셨습니까? –

+0

예 (정확함) –

+0

WSO2 ESB 정책 편집기를 통해 수동으로 편집하지 않고도 여러 정책을 여러 정책에 적용 할 수있는 방법을 찾으려고했습니다. Synapse 구성 언어를 통해 정의 할 수있는 방법이있을 것으로 기대하고있었습니다. –

답변

2

당신은 바인딩 계층 구조에서 다른 정책 주제에 정책을 적용 할 정책 편집기를 통해 정책을 편집 할 수 있습니다. 들어오고 나가는 메시지에 다른 보안 정책을 적용하는 방법을 보여주는 샘플을 살펴보면 Securing request and response messages with different security policies을 참조 할 수 있습니다.

이 샘플은 axis2 서비스의 services.xml을 직접 편집합니다.

ESB의 정책 편집기를 통해 정책을 변경하고 저장하면 동일한 효과를 얻을 수 있습니다.

여전히 작동하지 않는 경우 편집 된 policy.xml과 결과에 대한 더 자세한 정보를 제공하는 결과 wsdl을 첨부하십시오.

+0

올바른 예를 지적 해 주셔서 감사합니다. WSO2 ESB를 통해 백엔드 보안 웹 서비스를 제공하는 단일 WSDL에서 각 엔드 포인트 참조 (EPR)에 대해 비슷한 다중 정책 바인딩을 수행하려고합니다. ESB를 사용하여 수신 보안 토큰 (UT 또는 X509)을 기반으로 들어오는 요청을 수정하여 적절한 백엔드 서비스 끝점으로 라우팅하려고합니다. 목표는 다음 WSDL과 유사한 WSDL을 노출하는 내 STS 프록시를 구성하는 것입니다. http://svn.apache.org/repos/asf/cxf/trunk/services/sts/sts-war/src/main/webapp /WEB-INF/wsdl/ws-trust-1.4-service.wsdl –

+0

WSO2 ESB가 자동으로 프록시 엔드 포인트를 생성합니다 (http https soap sopa12). 엔드 포인트의 생성을 어떻게 제어합니까? 제 경우에는 각 정책마다 하나씩 필요하며 모두 HTTP 여야합니다. --- 설명에 따르면, Synapse 구성 언어를 사용하여 바인딩 계층의 여러 정책 주제에 여러 보안 정책을 적용 할 수 없음을 이해했습니다. 나는 정책 편집자를 통해 그것을 시도 할 것이다. –

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> 

희망이 있습니다.

+0

재생 해 주셔서 감사합니다. –

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, 나는 단지 IP와 원래 제공된 WSDL을 게시 할 수 있었다 사용/포트 프록시 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의 생성 방법을 제어하고 세부 수준에서 보안 정책을 적용 할 수 있습니다.

추 신 : 소스보기에서 직접 편집하여 보안 정책을 적용하면 UI가 여전히 무보증으로 표시됩니다. 웹 UI를 통해 기본 제공 보안 정책이 적용되거나 정책 이름이 기본 제공 정책 중 하나와 일치하는 경우