Donnerstag, 26. Juni 2008

How to secure a BPEL process which is called by another BPEL process?

Assume that we want to secure a BPEL process (BPELProcess1) that is called by another BPEL process (BPELProcess2) using OWSM server side agent. Moreover both BPEL processes are located in the same Oracle AS.






For the OWSM server side agent installation and configuration follow the description on OTN how to "Securing Oracle SOA Applications by Using Oracle Web Services Manager (Oracle WSM) Agents".

Additional to that you have to do the following configuration in your BPELProcess2, otherwise the security policies configured in the server side agent for BPELProcess1 will ignored because the communication between these two BPEL processes uses not SOAP but WSIF (native call).

Open in JDeveloper the BPELProcess2.bpel, right click on the partner link BPELProcess1 and select edit. Then swith to the Property tab. On this tab use the Create button to add a new property called "optSoapShortct". You can pick the name of this property from the drop down combo. Set the value in the "Property Value" box to "false".

I used the following environment:
Oracle SOA Suite 10.1.3.3 on Linux
JDeveloper 10.1.3.3 on Windows XP

Dienstag, 29. April 2008

Hinweise zu OWSM J2SE Client Agenten

Der Oracle Web Service Manager (OWSM) ist eine Sicherheitsplattform für die Zugriffssicherung und -verwaltung von Diensten (Services), die durch eine WSDL beschrieben werden. Der OWSM stellt durch eine deklarative Definition Sicherheitsregeln (Policies) wie z.B. Web Service Security in Form von sogenannten Policy Enforcement Points (PEP) einer Java/J2EE Laufzeitumgebung zur Verfügung. Somit sind keine programmatischen Änderungen an der Konsumer- sowie an der Providerseite notwendig. Die PEPs werden als Gateways beziehungsweise als Client- oder Server-Agenten definiert. In diesen PEPs werden die Sicherheitsregeln umgesetzt.

Beispiel:
ein Client möchte einen verschlüsselten Aufruf auf Basis von WS Security zu einem Serviceendpoint (z.B. Web Service) tätigen. Auf der Clientseite (Konsumer) wird die Verschlüsselung (XML-Encryption) z.B. über einen Client-Agenten getätigt. Der nun verschlüsselte Request wird via SOAP zum Serviceendpunkt gesendet und auf der Serverseite (Provider) wieder durch einen weiteren PEP entschlüsslet (XML-Decryption).

Der OWSM unterstützt im wesentlichen 4 Typen von Client-Agenten:
  • J2SE Client Agenten für (standalone) Java Applikationen die auf (Web) Services zugreifen, wie typischerweise Swing Applikationen,
  • J2EE Client-Agenten, die konfiguriert werden für J2EE Module wie Servlet, JSP, JSF, EJB die Services aufrufen,
  • Client-Agenten für BPEL und ESB (WSIF-Agenten), die als Clients Dienste aufrufen und
  • Axis Client-Agenten für Web Services Clients, die das AXIS Framework 1.1 und 1.4 J2EE Clients nutzen
Im nachfolgenden wird kurz beschrieben, wie ein J2SE Client-Agent genutzt werden kann:
  1. Hinzufügen eines Client-Agenten im OWSM
  2. Definition einer Sicherheitsregel für den Client-Agenten im OWSM
  3. Installation des Client-Agenten auf einem Client
  4. Konfiguration des Client-Agenten mit dem Oracle J2SE Web Service Client
  5. Setzen des Classpath für den Oracle J2SE Web Service Client
1.) Hinzufügen eines Client-Agenten im OWSM

Im Web Service Manager Control (z.B. http://iamoel.oracle.vm:7777/ccore/index.jsp) wird unter Manage Policies eine neue Client-Agenten-Komponente (Add New Component) hinzugefügt. Diese OWSM Installation ist die zentrale Stelle, indem alle Policies definiert werden.




Folgende Werte für den Client-Agenten verwenden:
Component type = Client Agent
Container type = OC4J


2.) Definition einer Sicherheitsregel für den Client-Agenten
Siehe hierzu im Kapitel 5 der Oracle Web Service Manager Dokumentation (Admin Guide): http://download.oracle.com/docs/cd/E10291_01/doc.1013/e10299.pdf


3.) Installation des Client-Agenten auf einem Client

Der OWSM muss auf jedem Client zwecks Agenteninstallation installiert werden. Der Agent fängt den Clientaufruf ab und holt sich die Policies vom Policy Manager, der unter Punkt 1 installiert worden ist, ab und führt die Sicherheitsregeln auf der Clientseite aus.
Folgende Parameter müssen im ORACLE_HOME/owsm/bin/agent.properties für die Client-Agenteninstallation auf der Clientseite gesetzt werden:
  • agent.componentType –> OC4JClientInterceptor
  • agent.containerType –> OC4J
  • agent.containerVersion –> 10.1.3
  • client.home –> der Pfad, indem der Client-Agent installiert werden soll zum Beispiel /oracle/product/clientagent
  • agent.component.id –> die Komponenten-ID, die beim Hinzufügen des Client-Agenten unter Punkt 1 erzeugt worden ist

Als nächstes wird über die Kommandozeile mittels wsmadmin installAgent der Agent in das zuvor angegebene client.home Verzeichnis installiert.

4.) Konfiguration des Client-Agenten mit dem Oracle J2SE Web Service Client

Erzeuge durch den Web Service Proxy Wizard im JDeveloper einen J2SE Client der den Web Service aufruft .



Im Wizard wird die WSDL Datei angegben, die für den J2SE Client verwendet wird.




Nach Beendigung des Wizards werden diverse Java Files herausgeneriert, u.a.:
  • (MyWebService1)SoapHttpPortClient.java enthält den Web Service Aufruf in der main Methode. Hier muss noch der Web Service Methodenaufruf vorgenommen werden
  • (MyWebService1)SoapHttp_Stub.java für den Web Service Stub. In diesem Stub befindet sich u.a. ein Verweis auf ein Konfigurationsfile wo sich der Agent befindet. Dieses File hat anstelle der java Endung eine xml Kennung, hier: (MyWebService1)SoapHttp_Stub.xml

Das (MyWebService1)SoapHttp_Stub.xml File kann über einen weiteren Wizard (Secure Proxy) im JDeveloper erzeugt werden. Dabei alle Checkboxeinträge im Wizard entfernen.


WICHTIG: die herausgenierte Datei (MyWebService1)SoapHttp_Stub.xml muss sich im Verzeichnis befinden, wo die (MyWebService1)SoapHttp_Stub.class Datei sich befindet, hier im ...proxy\runtime Folder. Änderungen nur an dieser Datei im Verzeichnis vornehmen.

In der
(MyWebService1)SoapHttp_Stub.xml ist nun die Runtime Sektion zu änderen, von

<runtime enabled="security">
<security>
<inbound/>
<outbound/>
</security>
</runtime>

nach

<runtime enabled="owsm">
<owsm init-home="/oracle/product/clientagent/owsm/config/interceptors/C0003003"/>
</runtime>



5.) Setzen des Classpath für den Oracle J2SE Web Service Client


Bevor der Web Service Client ausgeführt werden kann, müssen folgende JAR Dateien in den Classpath aufgenommen werden:
  • alle JAR-Dateien aus dem Verzeichnis, wo der Clientagent installiert worden ist:
    client.home/owsm/lib/extlib
  • ORACLE_HOME/owsm/lib/cfluent-log4.j.jar
  • JDBC JAR File
  • ORACLE_HOME/jlib/orail8n.jar und ORACLE_HOME/jlib/ojmisc.jar

Mögliche Fehler:

Classpath nicht richtig gesetzt oder (MyWebService1)SoapHttp_Stub.xml wurde nach Änderung des Classpath überschrieben

Verwendete Versionen: Oracle SOA Suite 10.1.3.3 sowie JDeveloper 10.1.3.3