Как переопределить политику 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 не добавляйте ни одного пользователя или группу в эту новую политику, и по умолчанию это позволит всем пользователям получать доступ к этой службе.