Как переопределить политику OWSM ссылки привязки REST в Soa Suite 12c?

Я работаю над Oracle Fusion Middleware 12.1.3.

В своем композите я добавил внешнюю ссылку "Переплет", для которой я добавил oracle/wss_http_token_client_policy и переопределил свойство csf-key.

В файлах это выглядит так:

myComposite.BAS:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 12.1.3.0.0 at [01-06-2016 16:01]. -->
<composite name="MyCompositeBAS"
           revision="9.8.8"
           label="2016-06-01_16-01-48_442"
           mode="active"
           state="on"
           xmlns="http://xmlns.oracle.com/sca/1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
           xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
           xmlns:ui="http://xmlns.oracle.com/soa/designer/"
           xmlns:sca-ext="http://xmlns.oracle.com/sca/1.0-ext">

  [.....]

  <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/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcess)"
                        callbackInterface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcessCallback)"/>
      </service>
      <reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl">
        <interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/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/GDDSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/>
    <binding.rest config="Adapters/CMProxyRS.wadl" location="http://myUatServer/cmproxy/resources/v2/" />
  </reference>

  [....]

  <wire>
    <source.uri>MyCompositeBASProcess/CMProxyRS</source.uri>
    <target.uri>CMProxyRS</target.uri>
  </wire>
</composite>

wsm-assembly.xml:

<?xml version="1.0" encoding="windows-1252" ?>
<orawsp:wsm-assembly xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy">
  <sca11:policySet xmlns:sca11="http://docs.oasis-open.org/ns/opencsa/sca/200912" name="policySet"
               appliesTo="SCA-REST-REFERENCE()" attachTo="REFERENCE('CMProxyRS')" orawsp:highId="2" 
               xml:id="SCA-REST-REFERENCE__REFERENCE__CMProxyRS__">
    <wsp:PolicyReference xmlns:wsp="http://www.w3.org/ns/ws-policy"
                     DigestAlgorithm="http://www.w3.org/ns/ws-policy/Sha1Exc"
                     URI="oracle/wss_http_token_client_policy" orawsp:status="enabled" orawsp:id="2">
      <orawsp:OverrideProperty xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" orawsp:name="csf-key"
                           orawsp:value="cmproxy.rest"/>
    </wsp:PolicyReference>
  </sca11:policySet>
</orawsp:wsm-assembly>

И это прекрасно работает в моих средах UAT и PROD, где установлена ​​базовая аутентификация.

Моя проблема для среды DEV: служба REST не требует никакой аутентификации. Как я могу изменить или удалить <wsp:PolicyReference ...> когда композит развертывается в среде DEV?

Просматривая в Интернете, я нашел несколько примеров для переопределения PolicyReference, но для внешней ссылки "Привязки SOAP" в SOA Suite 11g. Я не нашел ничего конкретного ни для служб REST, ни для 12c.

Я попытался адаптировать образцы, которые я нашел в Интернете:

** Переопределить политику в "Плане конфигурации" **

Я написал план конфигурации, посвященный среде DEV:

<?xml version="1.0" encoding="UTF-8"?>
<SOAConfigPlan xmlns:jca="http://platform.integration.oracle/blocks/adapter/fw/metadata"
               xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"      
               xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
               xmlns:edl="http://schemas.oracle.com/events/edl" xmlns="http://schemas.oracle.com/soa/configplan">

    <composite name="MyCompositeBAS">
        <import>
            <searchReplace>
                <search/>
                <replace/>
            </searchReplace>
        </import>
        <reference name="CMProxyRS">
            <binding type="rest">
                <attribute name="location">
                    <replace>http://myDevServer/cmproxy/resources/v2/</replace>
                </attribute>
                <wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/>
            </binding>
        </reference>
    </composite>
</SOAConfigPlan>

Или я также попытался "отключить" (в плане конфигурации) политику, определенную в wsm-assembly.xml заменив последний блок из моего плана конфигурации:

    [....]
    <reference name="CMProxyRS">
        <binding type="rest">
            <attribute name="location">
                <replace>http://myDevServer/cmproxy/resources/v2/</replace>
            </attribute>
            <wsp:PolicyReference orawsp:category="security" orawsp:status="disabled" URI="oracle/wss_username_token_client_policy"/>
            <!--wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/ -->
        </binding>
    </reference>
    [....]

Но это не работает. Я знаю, что план конфигурации применяется, потому что я вижу, что композитный пытается получить доступ к серверу REST на myDevServer, но "оригинальная" политика не удаляется. И это подтвердил менеджер предприятия: на CMProxyRS Вкладка Политики, oracle/wss_http_token_client_policy все еще видно, Effective а также Enabled проверены.

Переопределите политику в "Composite.xml"

Я также попытался переопределить политику прямо в composite.xml чтобы увидеть, возможно ли переопределить то, что определено в wsm-assembly.xml файл. Я пробовал несколько способов, в зависимости от:

Composite.xml:

[....]
<binding.rest config="Adapters/CMProxyRS.wadl" location="http://myDevServer/cmproxy/resources/v2/" >
    <wsp:PolicyReference URI="oracle/wss_http_token_client_policy" orawsp:category="security" orawsp:status="disabled"/>
</binding.rest>
[....]

Различия между 11g и 12c

Образцы, которые я нашел в Интернете, были рассчитаны на 11 г, а не на 12 с. Единственное поведение, которое может отличаться при настройке политики через графический интерфейс jDeveloper:

  • В 12в <wsp:PolicyReference > тег добавлен в wsm-assembly.xml файл, завернутый в <sca11:policySet >;
  • В 11g кажется, что <wsp:PolicyReference > тег добавляется прямо в composite.xml файл. (и именно поэтому я попытался установить Политику непосредственно в композит в моем предыдущем тесте...)

Поэтому я также попытался добавить <sca11:policySet > в моем плане конфигурации, но это не удается...

Различия в пространствах имен

Если вы позаботитесь о wsp:, вы увидите, что:

  • в wsm-assembly.xml, это определено здесь: xmlns:wsp="http://www.w3.org/ns/ws-policy"
  • в composite.xml и configuration plan, это определено здесь: xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"

Таким образом, я также попытался заставить пространство имен http://www.w3.org/ns/ws-policy в моем плане конфигурации, но развертывание не удается (т.е. план конфигурации не применяется).

Я не знаю, как я могу пойти дальше...

Кто-нибудь может поделиться идеей? Кто-нибудь преуспевает в том, чтобы запрашивать службы REST с разными политиками в разных средах?

Большое спасибо.

1 ответ

После развертывания проекта в среде DEV, затем

1) Перейдите в консоль Oracle Fusion Middleware. 2) Откройте проект. 3) На вкладке Политики OWSM вы можете добавить или удалить эту политику. 4) После удаления сохраните сеанс и повторите попытку.

Есть еще один вариант.

Вместо использования политики oracle/wss_http_token_client_policy вы можете создать новую собственную политику, скопировав политику разрешений всех типов типа oracle/wss_http_token_client_policy.

В этой новой политике вы можете добавлять пользователей или группы, которые вы создали на weblogic.

При развертывании проекта на сервере DEV не добавляйте ни одного пользователя или группу в эту новую политику, и по умолчанию это позволит всем пользователям получать доступ к этой службе.

Другие вопросы по тегам