0

Ich arbeite mit der Oracle Fusion Middleware 12.1.3, und ich entwickle einen BPEL-Prozess, der einen Remote-REST-Service aufrufen muss, der eine Standardauthentifizierung benötigt.Wie kann ein REST-Service von BPEL in Oracle SOA mit Basic Authentication aufgerufen werden?

Ich habe ein Externe Referenz auf den Rest-Dienst, und in meinem composite.xml, sieht es wie folgt aus:

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

Mit diesem Code ich einen REST-Dienst aufrufen, die von einem Basic_Auth nicht gesichert ist, und es funktioniert gut.

Jetzt, wenn ich zu einer Remote-Umgebung wechseln, die eine Standardauthentifizierung benötigt, habe ich es nicht geschafft, erfolgreich zu sein.

Ich habe einige Beispiele gefunden, um SOAP-Dienste mit Basic Auth aufzurufen, aber nichts wirklich Interessantes für REST-Dienste. Aber im Oracle Fusion-Stack 12.1.3 werden REST-Services vor der Verwendung an SOAP-Services "angepasst", sodass ich dachte, dass ich die Beispiele verwenden könnte, die ich gefunden habe.

Also, ich meine aktualisiert composite.xml den Benutzer/Passwort und die Richtlinie hinzuzufügen:

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

Wie Sie sehen können, habe ich mit den javax.xml.ws.security.auth. Eigenschaften versucht und mit den oracle.webservices.auth. Eigenschaften. Aber beides ist fehlgeschlagen: Auf der Fernbedienung bekomme ich keine Basic-Authentifizierung in den Anfragen.

Ich aktualisierte auch meine CMProxyRS.wadl, um den Authorization Schlüssel in HTTP Header hinzuzufügen. Zum Beispiel:

<resources> 
    <resource path="/documents"> 
    <method name="GET" soa:wsdlOperation="searchDocument"> 
     <request> 
      <param name="Authorization" style="header" soa:expression="$msg.request/tns:Authorization" default="" type="xsd:string"/> 
      <param name="queryText" style="query" soa:expression="$msg.request/tns:queryText" default="" type="xsd:string"/> 
      <param name="fields" style="query" soa:expression="$msg.request/tns:fields" default="id,name,originalName,originalFormat,originalExtension,alternateFormat,alternateExtension,revision" type="xsd:string"/> 
      <param name="waitForIndexing" style="query" soa:expression="$msg.request/tns:waitForIndexing" default="false" type="xsd:boolean"/> 
     </request> 
     <response status="200"> 
.... 

Und die Authorization wurde in den WSDL "repliziert". :

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

Das hat nicht geholfen. In der Tat bin ich wirklich nicht sicher, dass das, was ich in meinem composite.xml (die Eigenschaften Benutzername, Kennwort, preemptiveBasicAuth) hinzugefügt hat, von der SOA-Engine verwendet wird, um die REST-Anforderung zu erstellen.

(Ich möchte angeben, dass es nicht ein Benutzer/Passwort Problem. Wenn ich diese REST Abfrage testen mit dem gleichen Benutzer/Passwort aus Postman, es funktionieren)

Wie kann ich verwalten aufrufen ein REST-Service mit Basis-Authentifizierung von einem Soa-Composite?

Antwort

0

Sie können versuchen OWSM oracle/http_jwt_token_client_policy, um die erforderlichen Header in der Anfrage zu übergeben.

Verwandte Themen