2010-03-31 1 views
0

Мне было интересно, можно ли построить cxf-bc с WS-SecurityPolicy вместо WS-Security. WS-SecurityPolicy кажется более элегантным решением, поскольку все в WSDL. Примеры приветствуются. :)WS-securitypolicy в cxf-bc deploy in servicemix

Ну с помощью Дэвида Я получил CXF-BC для установки и запуска ESB, но я не могу проверить его. Он постоянно возвращается с:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
    <soap:Fault> 
    <faultcode>soap:Server</faultcode> 
    <faultstring>These policy alternatives can not be satisfied: 
     {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}UsernameToken</faultstring> 
    </soap:Fault> 
</soap:Body> 
</soap:Envelope> 

Мой тзд:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://nwec.faa.gov/wxrec/UserAccount/types"> 
    <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/ws-securitypolicy-1.2.xsd"> 
    <wsse:UsernameToken wsu:Id="UsernameToken-25" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>bob</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">bobspassword</wsse:Password> 
    </wsse:UsernameToken> 
    </wsse:Security> 
    <wsa:Action>http://nwec.faa.gov/wxrec/UserAccount/UserAccountPortType/ApproveDenyAccountRequest</wsa:Action> 
</soapenv:Header> 
<soapenv:Body> 
    ... 
</soapenv:Body> 

Вот политика в WSDL:

<wsp:Policy wsu:Id="UserAccountBindingPolicy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"> 
    <wsp:ExactlyOne> 
    <wsp:All> 
     <wsaw:UsingAddressing xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" wsp:Optional="true" /> 
     <wsp:Policy > 
      <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Always"> 
      <wsp:Policy> 
       <sp:WssUsernameToken10 /> 
      </wsp:Policy> 
      </sp:UsernameToken> 
     </wsp:Policy> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 

ответ

0

С david's и Freeman в списке рассылки servicemix-пользователя. Я смог наконец получить правильную конфигурацию для реализации WS-Security Policy.

Вот мой окончательный beans.xml для моего до н.э.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" xmlns:util="http://www.springframework.org/schema/util" 
xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration" 
xmlns:http="http://cxf.apache.org/transports/http/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" 
xmlns:person="http://www.mycompany.com/ws-sec-proto" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util.xsd 
    http://servicemix.apache.org/cxfbc/1.0 
    http://repo2.maven.org/maven2/org/apache/servicemix/servicemix-cxf-bc/2010.01/servicemix-cxf-bc-2010.01.xsd 
    http://cxf.apache.org/transports/http-jetty/configuration 
    http://cxf.apache.org/schemas/configuration/http-jetty.xsd 
    http://cxf.apache.oarg/transports/http/configuration 
    http://cxf.apache.org/schemas/configuration/http-conf.xsd"> 

<import resource="classpath:META-INF/cxf/cxf.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-http.xml" /> 
<import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-policy.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-ws-security.xml" /> 

<bean id="myPasswordCallback" class="com.mycompany.ServerPasswordCallback" /> 

<cxfbc:consumer wsdl="classpath:wsdl/person.wsdl" 
    targetService="person:PersonService" targetInterface="person:Person" 
    properties="#properties" delegateToJaas="false" > 
<!-- not important for ws-security 
<cxfbc:inInterceptors> 
    <bean class="com.mycompany.SaveSubjectInterceptor" /> 
    <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" /> 
</cxfbc:inInterceptors> 
--> 
</cxfbc:consumer> 

<util:map id="properties"> 
    <entry> 
    <key> 
    <util:constant 
     static-field="org.apache.cxf.ws.security.SecurityConstants.CALLBACK_HANDLER" /> 
    </key> 
    <ref bean="myPasswordCallback" /> 
    </entry> 
</util:map> 

<httpj:engine-factory bus="cxf"> 
    <httpj:engine port="9001"> 
    <httpj:tlsServerParameters> 
    <sec:keyManagers keyPassword="password"> 
     <sec:keyStore type="JKS" password="password" resource="certs/cherry.jks" /> 
    </sec:keyManagers> 
    <sec:cipherSuitesFilter> 
     <sec:include>.*_WITH_3DES_.*</sec:include> 
     <sec:include>.*_WITH_DES_.*</sec:include> 
     <sec:exclude>.*_WITH_NULL_.*</sec:exclude> 
     <sec:exclude>.*_DH_anon_.*</sec:exclude> 
    </sec:cipherSuitesFilter> 
    <sec:clientAuthentication want="false" 
     required="false" /> 
    </httpj:tlsServerParameters> 
</httpj:engine> 
</httpj:engine-factory> 

<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" /> 

<bean class="org.apache.servicemix.common.osgi.EndpointExporter" /> 

</beans> 

Полный пример можно найти here, но она не может быть там через некоторое время.

0

По решению https://issues.apache.org/activemq/browse/SMXCOMP-711 и https://issues.apache.org/activemq/browse/SMXCOMP-712 (servicemix-cxf-bc-2010.01), это должно быть возможно и легко сделать.

См. Например, http://fisheye6.atlassian.com/browse/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/ws/security/CxfBcSecurityJAASTest.java?r=HEAD. В частности, метод testJAASPolicy.

Что касается ошибки, относящейся к утверждению утверждения UserNameToken, вы можете попробовать положить утверждение UserNameToken внутри SupportingToken или binding assertion в зависимости от того, что вы хотите сделать с маркером. Похоже, вы просто хотите, чтобы имя пользователя и пароль передавались в сообщении без какой-либо другой безопасности, такой как криптографическая привязка маркера к сообщению или шифрованию, поэтому поддерживающий токен, скорее всего, будет соответствовать вашим потребностям.

Я также призываю вас рассмотреть следующие дополнительные меры предосторожности при использовании UsernameToken:

  1. Криптографически связать маркер сообщения с помощью подписи.
  2. Используйте случайное слово и создал временную метку и кэшировать маркер на сервере, чтобы предотвратить Replay
  3. Рассмотрим шифрования маркера (до подписания, если вы также подписать) с использованием XML прил
  4. Использование TLS либо вместо или в дополнение к приведенные выше предложения
+0

Хорошо, посмотрев на JAASTest, я до сих пор не имею ни малейшего понятия о том, как его реализовать. Также не кажется, что JAASTest даже использует wsdl с политикой безопасности ws, определенную в нем, если я не пропущу что-то, и не кажется, что apache уже опубликовал servicemix-cxf-bc-2010.01.xsd , поэтому я не могу это использовать. – Vinh

+0

Пример шины CXF с добавлением внешней политики: http://fisheye6.atlassian.com/browse/servicemix/components/bindings/servicemix-cxf-bc/tags/servicemix-cxf-bc-2010.01/src/test/ Ресурсы/org/apache/servicemix/cxfbc/ws/security/xbean-jaas-policy-bus-context.xml? r = HEAD См. http://cxf.apache.org/docs/ws-securitypolicy.html для других способов приложить политику. Настройте своего потребителя CXF-BC: http://fisheye6.atlassian.com/browse/servicemix/components/bindings/servicemix-cxf-bc/tags/servicemix-cxf-bc-2010.01/src/test/resources/ org/apache/servicemix/cxfbc/ws/security/xbean-jaas.xml? r = HEAD – DavidValeri

+0

Все, что вам нужно, должно быть здесь http://repo2.maven.org/maven2/org/apache/servicemix/servicemix-cxf- bc/2010.01/ – DavidValeri