2010-03-31 4 views
0

Je me demandais s'il était possible de construire un cxf-bc avec WS-SecurityPolicy au lieu de simplement WS-Security. WS-SecurityPolicy semble être une solution plus élégante puisque tout est dans le WSDL. Exemples bienvenus. :)WS-securitypolicy dans cxf-bc deploy in servicemix

Avec l'aide de David, j'ai réussi à installer et à utiliser le CXF-BC sur l'ESB, mais je n'arrive pas à le tester. Il revient sans cesse avec:

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

ACréer:

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

Voici la politique dans le 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> 

Répondre

0

Avec david et Freeman sur la liste de diffusion servicemix-user. J'ai finalement pu obtenir la configuration correcte pour implémenter la stratégie de sécurité WS.

Voici mon beans.xml final pour la Colombie-Britannique mon

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

Exemple complet peut être trouvé here mais il ne peut y être après un certain temps.

0

À partir de la résolution de https://issues.apache.org/activemq/browse/SMXCOMP-711 et https://issues.apache.org/activemq/browse/SMXCOMP-712 (servicemix-cxf-bc-2010.01) cela devrait être possible et facile à faire. Pour un exemple, voir 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. Plus précisément, la méthode testJAASPolicy.

En ce qui concerne l'erreur relative à affirmer l'affirmation UsernameToken, vous pouvez essayer de mettre l'affirmation UsernameToken à l'intérieur d'un SupportingToken ou binding assertion en fonction de ce que vous voulez faire avec le jeton. Il semble que vous souhaitiez simplement qu'un nom d'utilisateur et un mot de passe soient transmis dans le message sans aucune autre sécurité, comme une liaison cryptographique du jeton au message ou au chiffrement, de sorte qu'un jeton de support répondra probablement à vos besoins.

Je vous invite aussi à considérer les précautions suivantes lorsque vous utilisez un UsernameToken:

  1. Cryptographically lier le jeton au message en utilisant une signature.
  2. Utilisez un nonce et horodatage créé et le cache du jeton sur le serveur afin d'éviter la relecture
  3. Pensez à chiffrer le jeton (avant de signer si vous signez également) en utilisant XML enc
  4. En utilisant TLS soit à la place ou en plus les suggestions ci-dessus
+0

Ok, après avoir regardé le JAASTest je n'ai toujours pas la moindre idée sur la façon de l'implémenter. De plus, il ne semble pas que le JAASTest utilise un wsdl avec la politique de sécurité wsdl, sauf si quelque chose me manque, et apache n'a pas encore publié le servicemix-cxf-bc-2010.01.xsd , donc je ne peux pas utiliser ça. – Vinh

+0

Exemple de bus CXF avec pièce jointe de stratégie externe: http://fisheye6.atlassian.com/browse/servicemix/components/bindings/servicemix-cxf-bc/tags/servicemix-cxf-bc-2010.01/src/test/ ressources/org/apache/servicemix/cxfbc/ws/sécurité/xbean-jaas-politique-bus-context.xml? r = HEAD Voir http://cxf.apache.org/docs/ws-securitypolicy.html pour d'autres façons d'attacher la politique. Configurez votre client 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/sécurité/xbean-jaas.xml? r = HEAD – DavidValeri

+0

Tout ce dont vous avez besoin devrait être ici http://repo2.maven.org/maven2/org/apache/servicemix/servicemix-cxf- bc/2010.01/ – DavidValeri