Thanks Guys.

It seems to me that I need to come up with custom solution for both of my
problems.
1. To support a Auth port that gives back a token for further reuse I'm
thinking about 
making my own Session/token management mechanism based on a custom
Header interceptor, which I would plug in right after ReadHeadersInterceptor
in the read phase. 

Question here is where to plug it in if I want all SOAP requests to get
intercepted in one place. 
I will have lots of endpoints and while I'm testing it under a single jaxws
endpoint currently,
what I really need is an interceptor shared by all SOAP endpoints.
I tried to attach it to cxf:bus , but that didn't work and it's probably not
a correct spot as 
the bus getting it all including REST and who knows may be JMS later.

2. Adding custom WSDL header is still open. Also for #1 above, it will
require SessionID token 
to be outputted in the reply header. I'm looking into output phase
interceptors, can you tell where you would intercept it such that I could
add something like
<soapenv:Header><Auth><SessionID>LongTokenHere</SessionID></Auth></soapenv:Header>?

Thanks a bunch,
-Vitaly






dkulp wrote:
> 
> 
> Ah.  Java first.    Right.   That complicates things quite a bit.  
> 
> This will become significantly easier with CXF 2.3 as we've added
> annotations 
> that can be used to attach policies to the java class/methods and such
> that 
> would appear in the WSDL.    But that's 2.3, not 2.2.4. 
> 
> For 2.2.3, we did apply a patch that supposedly allows it:
> https://issues.apache.org/jira/browse/CXF-2281
> but we didn't really get a test case for it some I'm not 100% sure how to 
> configure it.
> 
> Looking at the code, it LOOKS like it's only configured in via the
> external 
> policy attachment spec stuff.   You thus have a file like:
> 
> <attachments xmlns:wsp="http://www.w3.org/ns/ws-policy";>
>     <wsp:PolicyAttachment>
>         <wsp:AppliesTo>
>             <wsa:EndpointReferenceType 
> xmlns:wsa="http://www.w3.org/2005/08/addressing";>
>                 <wsa:Address>http://x.y.z/GreeterPort</wsa:Address>
>             </wsa:EndpointReferenceType>
>         </wsp:AppliesTo>
>         <wsp:Policy>
>            ............
>         </wsp:Policy>
>     </wsp:PolicyAttachment>    
> </attachments>
> 
> 
> and then in your spring config, just add:
> 
> <p:externalAttachment id="external"
>         location="classpath:/blah/blah/attachments.xml"/>
> 
> or similar.   Definitely not idea and it would be good to simplify this
> quite 
> a bit somehow.    (of course, with 2.3, the annotations simplify it quite
> a 
> bit)
> 
> Dan
> 
> 
> 
> 
> On Tue October 20 2009 1:06:01 pm vickatvuuch wrote:
>> Hi Dan,
>> 
>> Thanks for your reply.
>> 
>> Forgot to mention that I'm building and running on CXF 2.2.4.
>> 
>> Are you saying, that I can not have generated WSDL to include WSPolicy or
>> you are saying that if I configure it CXF will do it automagically? What
>> about this note on WS-SecurityPolicy?
>> 
>> Note: at this point, WS-SecurityPolicy support is ONLY available for
>> "WSDL
>> first" scenarios. The WS-SecurityPolicy fragments can only be pulled from
>> WSDL. In the future, we plan to enable various code first scenarios as
>>  well, but at this time, only WSDL first is available.
>> 
>> http://cxf.apache.org/docs/ws-securitypolicy.html
>> 
>> I already tried to specify policy as follows:
>> 
>>  <wsp:Policy wsu:Id="UsernameToken"
>> 
>> xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecuri
>> ty-utility-1.0.xsd"> <wsp:ExactlyOne>
>>      <wsp:All>
>>      <sp:SupportingTokens
>> xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>        <wsp:Policy>
>>           <sp:UsernameToken
>> sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/
>> IncludeToken/AlwaysToRecipient" />
>>        </wsp:Policy>
>>      </sp:SupportingTokens>
>>      </wsp:All>
>>      </wsp:ExactlyOne>
>>   </wsp:Policy>
>> 
>>   <jaxws:endpoint implementor="#helloWorldServiceBean"
>>     address="/v1/soap/HelloWorld">
>>     <jaxws:features>
>>       <p:policies>
>>            <wsp:PolicyReference URI="#UsernameToken"
>>              xmlns:wsp="http://www.w3.org/2006/07/ws-policy"; />
>>       </p:policies>
>> 
>>     </jaxws:features>
>> 
>>   </jaxws:endpoint>
>> 
>> java2ws produced the same WSDL as before - no traces of policy.
>> 
>> dkulp wrote:
>> > On Tue October 20 2009 11:28:59 am vickatvuuch wrote:
>> >> Hi All,
>> >>
>> >> I'm trying to put together a java first CXF server with WS-Security.
>> >> I have the WSS4JInInterceptor with password callback handling my
>> >> requests with clear text pass for now.
>> >> Could somebody point me into a right direction regarding two issues
>> I'm
>> >> trying to figure out:
>> >> 1. WSDL header generation, in particular how to add WS-Security header
>> >> to a
>> >> generated WSDL, any examples?
>> >
>> > Well, in general, you don't.   I've never actually seen that done.
>> >
>> > For the most part, what you would do it define a WS-SecurityPolicy
>> policy
>> > that
>> > defined the security constraints and then the various security policy
>> > runtimes
>> > would interpret that into the required security header.   In your case,
>> > the
>> > summary would be a TransportBinding/HttpsToken with a UsernameToken
>> > SupportingToken.
>> >
>> > In XML that would be added to the wsdl, it would look like:
>> >
>> >
>> >     <wsp:Policy wsu:Id="ut_policy"
>> > xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
>> >
>> > xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
>> > wss-wssecurity-utility-1.0.xsd">
>> >         <sp:TransportBinding
>> > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
>> >             <wsp:Policy>
>> >                 <sp:TransportToken>
>> >                     <wsp:Policy>
>> >                         <sp:HttpsToken/>
>> >                     </wsp:Policy>
>> >                 </sp:TransportToken>
>> >                 <sp:Layout>
>> >                     <wsp:Policy>
>> >                         <sp:Strict/>
>> >                     </wsp:Policy>
>> >                 </sp:Layout>
>> >                 <sp:AlgorithmSuite>
>> >                     <wsp:Policy>
>> >                         <sp:Basic128/>
>> >                     </wsp:Policy>
>> >                 </sp:AlgorithmSuite>
>> >             </wsp:Policy>
>> >         </sp:TransportBinding>
>> >         <sp:SupportingTokens
>> > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";>
>> >             <wsp:Policy>
>> >                 <sp:UsernameToken
>> > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";
>> >
>> sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/Inc
>> >ludeToken/Always"> <wsp:Policy>
>> >                         <sp:WssUsernameToken11/>
>> >                     </wsp:Policy>
>> >                 </sp:UsernameToken>
>> >             </wsp:Policy>
>> >         </sp:SupportingTokens>
>> >     </wsp:Policy>
>> >
>> > and then add
>> > <wsp:PolicyReference
>> > xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
>> > URI="#ut_policy"/>
>> >
>> > to the wsdl:service/wsdl:port  for your service.
>> >
>> > Of course, once you do that with CXF, the SecurityPolicy implementation
>> > will
>> > probably kick in and process it and you would need on unconfigure the
>> > WSS4J
>> > interceptors and reconfigure things using the SecurityPolicy constants.
>> > See:
>> >
>> > http://cxf.apache.org/docs/ws-securitypolicy.html
>> >
>> > for information.    Oliver Wulff is kind of working on a SecurityPolicy
>> > based
>> > UsernameToken example:
>> > http://www.nabble.com/WS-SecurityPolicy,-UsernamePassword-example-
>> > to25958182.html
>> >
>> >> 2. Another question I have is how to handle sessions using CXF, can't
>> >> find
>> >>  a good example on that.. Basic idea is to have a Auth port to
>> >> authenticate
>> >>  a session/token using WS-Security, have server return that
>> >> session/token and make client use that for subsequent calls into all
>> >> other ports.
>> >
>> > Yea.  That's definitely one way to do it.  You would normally define
>> some
>> > sort
>> > of session object in schema and then reference that schema from the
>> other
>> > services and define soap:headers in those WSDL's for the sessions.
>> >
>> > Dan
>> >
>> >> Thanks,
>> >> -Vitaly
>> >>
>> >> Here is SOAP request with WS-Security which WSS4JInInterceptor is
>> >> handling.
>> >>
>> >> <soapenv:Envelope
>> >> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
>> >>   xmlns:spr="http://spring.demo/";>
>> >>   soap:mustUnderstand="1">
>> >>   <soapenv:Header>
>> >>     <wsse:Security
>> >>
>> >>
>> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse
>> >>cur ity-secext-1.0.xsd"
>> >>
>> >>
>> xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssec
>> >>uri ty-utility-1.0.xsd" soapenv:mustUnderstand="true">
>> >>       <wsse:UsernameToken wsu:Id="UsernameToken-799830164">
>> >>         <wsse:Username>username</wsse:Username>
>> >>         <wsse:Password
>> >>
>> Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-t
>> >>oke n-profile-1.0#PasswordText">password</wsse:Password>
>> >> </wsse:UsernameToken>
>> >>     </wsse:Security>
>> >> </soapenv:Header>
>> >>
>> >>    <soapenv:Body>
>> >>       <spr:getDude>
>> >>          <!--Optional:-->
>> >>          <arg0>1</arg0>
>> >>          <!--Optional:-->
>> >>          <arg1>2</arg1>
>> >>       </spr:getDude>
>> >>    </soapenv:Body>
>> >> </soapenv:Envelope>
>> >>
>> >> My project is attached.
>> >> http://www.nabble.com/file/p25977266/CXFHelloServer.jar
>> >> CXFHelloServer.jar
>> 
> 
> -- 
> Daniel Kulp
> [email protected]
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: 
http://www.nabble.com/java-first-how-to-add-WS-Security-header-to-WSDL-tp25977266p25998758.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to