The NPE you were seeing is now fixed on trunk, if you want to test with the
latest CXF 2.6.2-SNAPSHOT code. You will need to make sure that the WSC has
a keystore with a private key to support the KeyValueToken policy.

Colm.



On Tue, Jun 5, 2012 at 10:14 AM, Colm O hEigeartaigh <[email protected]>wrote:

>
> Is the client successfully invoking on the STS? In other words, is this
> error occurring when the client is sending a message to the STS or to the
> WSP?
>
> Colm.
>
>
> On Fri, Jun 1, 2012 at 6:30 PM, Gina Choi <[email protected]> wrote:
>
>> To make it clear here is what I have so far.
>>
>> 1. WSP: SymmetricBinding, ProtectionToken is IssuedToken
>> 2. STS: endpoint:
>>
>> https://strts01.ams.dev/adfs/services/trust/13/usernamemixed
>>
>> Following policy is used.
>>
>>  <wsp:Policy wsu:Id="UserNameWSTrustBinding_IWSTrust13Async2_policy">
>>     <wsp:ExactlyOne>
>>       <wsp:All>
>>         <sp:TransportBinding xmlns:sp="
>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>           <wsp:Policy>
>>
>>             <sp:TransportToken>
>>               <wsp:Policy>
>>                 <sp:HttpsToken>
>>                   <wsp:Policy />
>>                 </sp:HttpsToken>
>>               </wsp:Policy>
>>             </sp:TransportToken>
>>             <sp:AlgorithmSuite>
>>               <wsp:Policy>
>>                 <sp:Basic256 />
>>               </wsp:Policy>
>>             </sp:AlgorithmSuite>
>>             <sp:Layout>
>>               <wsp:Policy>
>>                 <sp:Strict />
>>               </wsp:Policy>
>>             </sp:Layout>
>>             <sp:IncludeTimestamp />
>>           </wsp:Policy>
>>         </sp:TransportBinding>
>>         <sp:SignedEncryptedSupportingTokens 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:WssUsernameToken10 />
>>               </wsp:Policy>
>>             </sp:UsernameToken>
>>           </wsp:Policy>
>>         </sp:SignedEncryptedSupportingTokens>
>>          <sp:EndorsingSupportingTokens xmlns:sp="
>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>           <wsp:Policy>
>>             <sp:KeyValueToken sp:IncludeToken="
>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never
>> "
>>             wsp:Optional="true">
>>     <wsp:Policy/>
>>    </sp:KeyValueToken>
>>             <sp:SignedParts>
>>               <sp:Header Name="To"
>>               Namespace="http://www.w3.org/2005/08/addressing"; />
>>             </sp:SignedParts>
>>           </wsp:Policy>
>>         </sp:EndorsingSupportingTokens>
>>         <sp:Wss11 xmlns:sp="
>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>           <wsp:Policy>
>>
>>             <sp:MustSupportRefKeyIdentifier />
>>             <sp:MustSupportRefIssuerSerial />
>>             <sp:MustSupportRefThumbprint />
>>             <sp:MustSupportRefEncryptedKey />
>>           </wsp:Policy>
>>         </sp:Wss11>
>>         <sp:Trust13 xmlns:sp="
>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>           <wsp:Policy>
>>
>>             <sp:MustSupportIssuedTokens />
>>             <sp:RequireClientEntropy />
>>             <sp:RequireServerEntropy />
>>           </wsp:Policy>
>>         </sp:Trust13>
>>         <wsaw:UsingAddressing />
>>       </wsp:All>
>>     </wsp:ExactlyOne>
>>   </wsp:Policy>
>>
>> 3. WSC
>> Following is client configuration.
>>
>>    <jaxws:client name="{
>> http://www.example.org/contract/DoubleIt}DoubleItPort";
>> createdFromAPI="true">
>>        <jaxws:properties>
>>             <entry key="ws-security.sts.client">
>>                 <bean class="org.apache.cxf.ws.security.trust.STSClient">
>>      <constructor-arg ref="cxf"/>
>>      <property name="wsdlLocation" value="adfs_new_simple.wsdl"/>
>>      <property name="serviceName" value="{
>> http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}SecurityTokenService
>> "/>
>>      <property name="endpointName" value="{
>> http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}UserNameWSTrustBinding_IWSTrust13Async2
>> "/>
>>      <property name="properties">
>>       <map>
>>        <entry key="ws-security.username" value="gchoi"/>
>>
>>        <entry key="ws-security.callback-handler"
>> value="client.ClientCallbackHandler"/>
>>         <entry key="ws-security.encryption.properties"
>> value="clientKeystore.properties"/>
>>        <entry key="ws-security.encryption.username" value="mystskey"/>
>>       </map>
>>      </property>
>>     </bean>
>>    </entry>
>>   </jaxws:properties>
>>  </jaxws:client>
>> </beans>
>>
>> I am getting following exception when I execute client.
>>
>> WARNING: Interceptor for {
>> http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}SecurityTokenService#{http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice}Trust13IssueAsynchas
>>  thrown exception, unwinding now
>> org.apache.cxf.interceptor.Fault
>>         at
>> org.apache.cxf.ws.security.wss4j.policyhandlers.TransportBindingHandler.handleBinding(TransportBindingHandler.java:153)
>>         at
>> org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:159)
>>         at
>> org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JOutInterceptor$PolicyBasedWSS4JOutInterceptorInternal.handleMessage(PolicyBasedWSS4JOutInterceptor.java:89)
>>         at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
>>         at
>> org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:532)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
>>         at
>> org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:722)
>>         at
>> org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:602)
>>         at
>> org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:594)
>>         at
>> org.apache.cxf.ws.security.policy.interceptors.IssuedTokenInterceptorProvider$IssuedTokenOutInterceptor.getTokenFromSTS(IssuedTokenInterceptorProvider.java:404)
>>         at
>> org.apache.cxf.ws.security.policy.interceptors.IssuedTokenInterceptorProvider$IssuedTokenOutInterceptor.handleMessage(IssuedTokenInterceptorProvider.java:188)
>>         at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
>>         at
>> org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:532)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
>>         at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
>>         at
>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
>>         at
>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
>>         at $Proxy25.doubleIt(Unknown Source)
>>         at client.WSClient.doubleIt(WSClient.java:18)
>>         at client.WSClient.main(WSClient.java:11)
>> Caused by: java.lang.NullPointerException
>>         at
>> org.apache.cxf.ws.security.wss4j.policyhandlers.TransportBindingHandler.doIssuedTokenSignature(TransportBindingHandler.java:429)
>>         at
>> org.apache.cxf.ws.security.wss4j.policyhandlers.TransportBindingHandler.handleEndorsingToken(TransportBindingHandler.java:283)
>>         at
>> org.apache.cxf.ws.security.wss4j.policyhandlers.TransportBindingHandler.handleEndorsingSupportingTokens(TransportBindingHandler.java:240)
>>         at
>> org.apache.cxf.ws.security.wss4j.policyhandlers.TransportBindingHandler.handleBinding(TransportBindingHandler.java:147)
>>         ... 22 more
>> Jun 1, 2012 1:12:51 PM org.apache.cxf.phase.PhaseInterceptorChain
>> doDefaultLogging
>>
>>
>> On Fri, Jun 1, 2012 at 1:06 PM, Gina Choi <[email protected]> wrote:
>>
>>> Hi Colm,
>>>
>>> <<<
>>> The client needs to configure the HTTP conduit with the keystore that
>>> contains the certificate of the STS, e.g.:
>>> >>>
>>> Forgot to ask you. ADFS exposes three different certificates - Service
>>> communications, Token-decrypting and Token-singing, but most of the time I
>>> had to deal with decrypting and signing cert. Which of the STS certificate
>>> do I need to have in client keystore?
>>>
>>> On Fri, Jun 1, 2012 at 12:52 PM, Gina Choi <[email protected]> wrote:
>>>
>>>> <<<
>>>> The following policy (KeyValueToken) is not supported, but you could
>>>> remove it as it is optional and see if that works:
>>>> >>>
>>>> Per Oliver advise, after I added an empty <wsp:Policy />element as a
>>>> child of <sp:KeyValueToken>, I don't receive anymore compaining.
>>>>
>>>> <<<
>>>> The client needs to configure the HTTP conduit with the keystore that
>>>> contains the certificate of the STS, e.g.:
>>>>  <http:conduit name="https://localhost:.*";>
>>>>       <http:tlsClientParameters disableCNCheck="true">
>>>>         <sec:trustManagers>
>>>>           <sec:keyStore type="jks" password="cspass"
>>>> resource="clientstore.jks"/>
>>>>         </sec:trustManagers>
>>>>       </http:tlsClientParameters>
>>>>    </http:conduit>
>>>> >>>
>>>> Afer added following to my client configuration, now I am getting new
>>>> exception. By the way, with ADFS, I have to use https.
>>>>
>>>>  <http:conduit name="https://strts01.ams.dev.*";>
>>>>
>>>>   <http:tlsClientParameters disableCNCheck="true">
>>>>    <sec:trustManagers>
>>>>     <sec:keyStore type="jks" password="cspass"
>>>> resource="clientstore.jks"/>
>>>>    </sec:trustManagers>
>>>>   </http:tlsClientParameters>
>>>>    </http:conduit>
>>>>
>>>>
>>>> Jun 1, 2012 12:47:33 PM org.apache.cxf.bus.spring.SpringBusFactory
>>>> createApplicationContext
>>>> WARNING: Initial attempt to create application context was unsuccessful.
>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
>>>> Line 57 in XML document from class path resource [cxf.xml] is invalid;
>>>> nested exception is org.xml.sax.SAXParseException: The prefix "http" for
>>>> element "http:conduit" is not bo
>>>> .
>>>>         at
>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader.doLoadBeanDefinitions(ControlledValidationXmlBeanDefinitionReader.java:115)
>>>>         at
>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader.internalLoadBeanDefinitions(ControlledValidationXmlBeanDefinitionReader.java:154)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader.access$000(ControlledValidationXmlBeanDefinitionReader.java:66)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader$1.run(ControlledValidationXmlBeanDefinitionReader.java:141)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader$1.run(ControlledValidationXmlBeanDefinitionReader.java:140)
>>>>         at java.security.AccessController.doPrivileged(Native Method)
>>>>         at
>>>> org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader.loadBeanDefinitions(ControlledValidationXmlBeanDefinitionReader.java:139)
>>>>         at
>>>> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
>>>>         at
>>>> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
>>>>         at
>>>> org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:122)
>>>>         at
>>>> org.apache.cxf.bus.spring.BusApplicationContext.loadBeanDefinitions(BusApplicationContext.java:309)
>>>>         at
>>>> org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
>>>>         at
>>>> org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
>>>>         at
>>>> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
>>>>         at
>>>> org.apache.cxf.bus.spring.BusApplicationContext$1.run(BusApplicationContext.java:101)
>>>>         at
>>>> org.apache.cxf.bus.spring.BusApplicationContext$1.run(BusApplicationContext.java:100)
>>>>         at java.security.AccessController.doPrivileged(Native Method)
>>>>         at
>>>> org.apache.cxf.bus.spring.BusApplicationContext.<init>(BusApplicationContext.java:99)
>>>>         at
>>>> org.apache.cxf.bus.spring.SpringBusFactory.createApplicationContext(SpringBusFactory.java:130)
>>>>         at
>>>> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:121)
>>>>         at
>>>> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:95)
>>>>         at
>>>> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:69)
>>>>         at
>>>> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:58)
>>>>         at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:99)
>>>>         at
>>>> org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:165)
>>>>         at
>>>> org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:155)
>>>>         at
>>>> org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:140)
>>>>         at
>>>> org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:96)
>>>>         at javax.xml.ws.Service.<init>(Service.java:92)
>>>>         at
>>>> org.example.contract.doubleit.DoubleItService.<init>(DoubleItService.java:47)
>>>>         at client.WSClient.main(WSClient.java:8)
>>>>
>>>>
>>>> On Fri, Jun 1, 2012 at 12:13 PM, Colm O hEigeartaigh <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>> The client needs to configure the HTTP conduit with the keystore that
>>>>> contains the certificate of the STS, e.g.:
>>>>>
>>>>>  <http:conduit name="https://localhost:.*";>
>>>>>       <http:tlsClientParameters disableCNCheck="true">
>>>>>         <sec:trustManagers>
>>>>>           <sec:keyStore type="jks" password="cspass"
>>>>> resource="clientstore.jks"/>
>>>>>         </sec:trustManagers>
>>>>>       </http:tlsClientParameters>
>>>>>    </http:conduit>
>>>>>
>>>>> What NPE are you getting? The following policy (KeyValueToken) is not
>>>>> supported, but you could remove it as it is optional and see if that 
>>>>> works:
>>>>>
>>>>>
>>>>> <sp:EndorsingSupportingTokens xmlns:sp="
>>>>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
>>>>> <wsp:Policy>
>>>>>             <sp:KeyValueToken sp:IncludeToken="
>>>>> http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never
>>>>> "
>>>>>             wsp:Optional="true">
>>>>>               <wsp:Policy />
>>>>>             </sp:KeyValueToken>
>>>>>             <sp:SignedParts>
>>>>>               <sp:Header Name="To"
>>>>>               Namespace="http://www.w3.org/2005/08/addressing"; />
>>>>>             </sp:SignedParts>
>>>>>           </wsp:Policy>
>>>>>         </sp:
>>>>> EndorsingSupportingTokens>
>>>>>
>>>>> Colm.
>>>>>
>>>>
>>>
>>
>
>
> --
> Colm O hEigeartaigh
>
> Talend Community Coder
> http://coders.talend.com
>
>


-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Reply via email to