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