I'm trying to use NTLM to secure WCF web service that is to be called from
CXF. I'm using .NET 4 and CXF 2.4.2. On an earlier version of CXF, I had
been successful in using NTLM authentication using the jcifs library as
described in
http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html
It appears that now with the newer version, things have changed and that
technique no longer seems to work. On WCF, I got the binding defined as:
<basicHttpBinding>
<binding name="serviceBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm=""/>
</security>
</binding>
</basicHttpBinding>
On the Java side, I got the proxy generated and the client side code has the
jcifs code:
jcifs.Config.setProperty("jcifs.smb.client.domain",
domain.toLowerCase());
jcifs.Config.setProperty("jcifs.netbios.wins", hostname);
jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "300000");
// 20 minutes
jcifs.Config.setProperty("jcifs.netbios.cachePolicy", "1200");
jcifs.Config.setProperty("jcifs.smb.client.username", user);
jcifs.Config.setProperty("jcifs.smb.client.password", password);
jcifs.Config.registerSmbURLHandler();
...
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
...
When I run the Java client, I get this:
Sep 2, 2011 1:44:33 PM org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
handleNoRegisteredBuilder
WARNING: No assertion builder for type
{http://schemas.microsoft.com/ws/06/2004/policy/http}NtlmAuthentication
registered.
Exception in thread "main" org.apache.cxf.ws.policy.PolicyException: None of
the policy alternatives can be satisfied.
at
org.apache.cxf.ws.policy.EndpointPolicyImpl.chooseAlternative(EndpointPolicyImpl.java:165)
at
org.apache.cxf.ws.policy.EndpointPolicyImpl.finalizeConfig(EndpointPolicyImpl.java:145)
at
org.apache.cxf.ws.policy.EndpointPolicyImpl.initialize(EndpointPolicyImpl.java:141)
at
org.apache.cxf.ws.policy.PolicyEngineImpl.createEndpointPolicyInfo(PolicyEngineImpl.java:555)
at
org.apache.cxf.ws.policy.PolicyEngineImpl.getEndpointPolicy(PolicyEngineImpl.java:301)
at
org.apache.cxf.ws.policy.PolicyEngineImpl.getClientEndpointPolicy(PolicyEngineImpl.java:283)
at
org.apache.cxf.transport.http.policy.PolicyUtils.getClient(PolicyUtils.java:150)
at
org.apache.cxf.transport.http.HTTPConduit.<init>(HTTPConduit.java:304)
at
org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory.getConduit(ClientOnlyHTTPTransportFactory.java:63)
at
org.apache.cxf.transport.http.ClientOnlyHTTPTransportFactory.getConduit(ClientOnlyHTTPTransportFactory.java:50)
at
org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransportFactory.java:228)
at
org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:88)
at
org.apache.cxf.endpoint.UpfrontConduitSelector.selectConduit(UpfrontConduitSelector.java:71)
at org.apache.cxf.endpoint.ClientImpl.getConduit(ClientImpl.java:814)
Thus failing as soon as client.getConduit() is called. I have not found any
working example of what's the proper way of using NTLM with CXF. Any help?
Thanks,
Samyem
--
View this message in context:
http://cxf.547215.n5.nabble.com/NTLM-security-between-WCF-and-CXF-tp4763671p4763671.html
Sent from the cxf-user mailing list archive at Nabble.com.