0

Oracle Fusion Middleware 12.1.3을 사용하고 있으며 기본 인증이 필요한 원격 REST 서비스를 호출해야하는 BPEL 프로세스를 개발 중입니다. Basic 인증을 사용하여 Oracle SOA의 BPEL에서 REST 서비스를 호출하는 방법은 무엇입니까?

나는 나머지 서비스에 외부 참조를 만들어 내 composite.xml, 그것은 다음과 같습니다

.... 
<component name="MyCompositeBASProcess" version="2.0"> 
    <implementation.bpel src="BPEL/MyCompositeBASProcess.bpel"/> 
    <componentType> 
     <service name="mycompositebasprocess_client" ui:wsdlLocation="WSDLs/MyCompositeBASProcess.wsdl"> 
      <interface.wsdl interface="http://xmlns.oracle.com/myPartitionSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcess)" 
        callbackInterface="http://xmlns.oracle.com/myPartitionSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcessCallback)"/> 
     </service> 
     <reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl"> 
      <interface.wsdl interface="http://xmlns.oracle.com/myPartitionSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/> 
     </reference> 
    </componentType> 
    <property name="bpel.config.oneWayDeliveryPolicy" type="xs:string" many="false">async.persist</property> 
</component> 

<reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl"> 
    <interface.wsdl interface="http://xmlns.oracle.com/myPartitionSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/> 
    <binding.rest config="Adapters/CMProxyRS.wadl" location="http://server_WITHOUT_basic-auth/cmproxy/resources/v2/" /> 
</reference> 
.... 
나는 BASIC_AUTH에 의해 보호되지 않는 REST 서비스를 호출 코드와

하고, 그것은 잘 작동합니다.

이제 기본 인증이 필요한 원격 환경으로 전환 할 때 성공하지 못했습니다.

기본 인증을 사용하여 SOAP 서비스를 호출하는 몇 가지 예가 있지만 실제로 REST 서비스에는 관심이 없습니다. 그러나 Oracle Fusion 스택 12.1.3에서 REST 서비스는 사용되기 전에 SOAP 서비스에 "적용"되므로, 내가 찾은 예제를 사용할 수 있다고 생각했습니다.

그래서, 사용자/암호와 정책을 추가 내 composite.xml 업데이트 : 당신이 볼 수 있듯이

.... 
<reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl"> 
    <interface.wsdl interface="http://xmlns.oracle.com/myPartitionSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/> 
    <binding.rest config="Adapters/CMProxyRS.wadl" location="http://server_WITH_basic-auth/cmproxy/resources/v2/"> 
     <wsp:PolicyReference URI="oracle/wss_username_token_client_policy" orawsp:category="security" orawsp:status="enabled"/> 
     <!-- <property name="oracle.webservices.auth.username">weblogic</property>      --> 
     <!-- <property name="oracle.webservices.auth.password">password</property> --> 
     <property name="oracle.webservices.preemptiveBasicAuth">true</property> 
     <property name="javax.xml.ws.security.auth.username" many="false" override="may">weblogic</property> 
     <property name="javax.xml.ws.security.auth.password" many="false" override="may">password</property> 
    </binding.rest>  
</reference> 
.... 

, 내가 javax.xml.ws.security.auth. 속성과 oracle.webservices.auth. 속성했습니다. 하지만 둘 다 실패했습니다. 원격에서는 요청에 기본 인증을 얻지 못합니다.

HTTP HeaderAuthorization 키를 추가하여 CMProxyRS.wadl을 업데이트했습니다. 예 :

그리고이 Authorization은 WSDL에서 "복제"되었습니다. CMProxyRS.wsdl :

<element name="searchDocument_params"> 
    <complexType> 
     <sequence> 
      <element name="Authorization" type="string"/> 
      <element name="queryText" type="string"/> 
      <element name="fields" type="string"/> 
      <element name="waitForIndexing" type="boolean"/> 
     </sequence> 
    </complexType> 
</element> 

이것은 도움이되지 않았습니다. 사실 SOA 엔진은 composite.xml (속성 username, password, preemptiveBasicAuth)에 추가 한 내용을 REST 요청을 작성하는 데 사용하고 있는지 확실하지 않습니다.

(나는 그것이 사용자/암호 문제가 아님을 지정할 수 싶습니다. 나는 우체부에서 같은 사용자/암호이 REST 쿼리를 테스트 할 때, 그것은 잘 작동)

어떻게 호출 관리 할 수 ​​있습니다 soa-composite에서 기본 인증을 가진 REST 서비스?

답변

0

OWSM oracle/http_jwt_token_client_policy를 사용하면 요청에 필요한 헤더를 전달할 수 있습니다.