I successfully logged in with Kerberos using httpcomponents-client as
described here http://hc.apache.org/httpcomponents-client-
ga/tutorial/html/authentication.html#spnego
After a debugging run it seems that you have to set
<sec:Authorization/>
when using <sec:UserName /> and <sec:Password /> in cxf.xml.
Line 104 in SpnegoAuthSupplier.java creates a new LoginContext with
authPolicy.getAuthorization() as the first constructor argument. Currently this
method returns null as I did not set <sec:Authorization/> in cxf.xml. Maybe
this sets the name for the login.conf section. SampleClient in your example.
I'll give it a try.
On Monday 12 September 2011 14:50:54 Christian Schneider wrote:
> I am not sure if it is the login.conf but you need to specify that you
> want to use the tgt cache like this:
>
> SampleClient {
> com.sun.security.auth.module.Krb5LoginModule
> required*useTicketCache=true* };
>
> I am not sure about the name SampleClient above and what you should write
> there but the *useTicketCache=true* is important.
> I currently have no kerberos environment else I would do a test and let you
> know what is necessary.
>
> Btw. Have you tried to do a kerberos login without CXF? The config you need
> there should be the same as for cxf.
>
> Christian
>
> Am 12.09.2011 14:38, schrieb Michael Sliwak:
> > Hi Christian!
> >
> > Setting the corresponding registry key on windows does not have any
> > effect.
> >
> > Just one quick question before I dive more in to the code of CXF. Do I
> > have to specify a login.conf for JGSS when using CXF?
> >
> > The Javadoc for the LoginContext states
> > (http://download.oracle.com/javase/1,5.0/docs/api/javax/security/auth/lo
> > gin/LoginContext.html#LoginContext(java.lang.String,
> > %20javax.security.auth.callback.CallbackHandler):
> >
> > Throws:
> > LoginException - if the caller-specified name does not appear in the
> > Configuration and there is no Configuration entry for "other", if the
> > caller- specified subject is null, or if the
> > auth.login.defaultCallbackHandler security property was set, but the
> > implementation class could not be loaded.
> >
> > I have a slight suspicion that I'm still missing some configuration.
> >
> > Michael
> >
> > On Monday 12 September 2011 13:19:16 Christian Schneider wrote:
> >> I am not sure about the first exception. Could you debug into the code
> >> and try to find out more about the point where the exception happens?
> >>
> >> About the second problem when using no username and password on
> >> windows.
> >> Can you check if you have the registry setting that allows java to use
> >> the tgt?
> >> See: http://www.javaactivedirectory.com/?page_id=93
> >>
> >> Christian
> >>
> >> Am 12.09.2011 13:07, schrieb Michael Sliwak:
> >>> Hello everyone!
> >>>
> >>> According to
> >>> http://cxf.apache.org/docs/client-http-transport-including-ssl-
> >>> support.html#ClientHTTPTransport%28includingSSLsupport%29-
> >>> SpnegoAuthentication%28Kerberos%29 CXF should be able to handle
> >>> Kerberos/SPNEGO authentication when accessing web services.
> >>>
> >>> I'm trying to access an ASP.NET Web Service that is secured by
> >>> Kerberos
> >>> (Integrated Windows authentication) using CXF.
> >>>
> >>> I have configured everything as stated in the documentation. Here's
> >>> my
> >>> cxf.xml
> >>>
> >>> <?xml version="1.0" encoding="UTF-8"?>
> >>>
> >>> <beans xmlns="http://www.springframework.org/schema/beans"
> >>>
> >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> >>>
> >>> xmlns:sec="http://cxf.apache.org/configuration/security"
> >>>
> >>> xmlns:http="http://cxf.apache.org/transports/http/configurat
> >>> ion"
> >>> xmlns:jaxws="http://cxf.apache.org/jaxws"
> >>> xsi:schemaLocation="
> >>>
> >>> http://cxf.apache.org/configuration/securi
> >>> ty
> >>> http://cxf.apache.org/schemas/configuratio
> >>> n/secu
> >>> rity.xsd
> >>> http://cxf.apache.org/transports/http/conf
> >>> igurat
> >>> ion
> >>> http://cxf.apache.org/schemas/configuratio
> >>> n/http
> >>> -conf.xsd
> >>> http://cxf.apache.org/jaxws
> >>> http://cxf.apache.org/schemas/jaxws.xsd
> >>> http://www.springframework.org/schema/bean
> >>> s
> >>> http://www.springframework.org/schema/bean
> >>> s/spri
> >>> ng-beans.xsd">>
> >>>
> >>> <http:conduit
> >>> name="{http://some.name.space/}SoapPort.http-conduit">
> >>>
> >>> <http:client AllowChunking="false" />
> >>> <http:authorization>
> >>>
> >>> <sec:UserName>username</sec:UserName>
> >>> <sec:Password>password</sec:Password>
> >>> <sec:AuthorizationType>Negotiate</sec:AuthorizationT
> >>> ype>
> >>>
> >>> </http:authorization>
> >>>
> >>> </http:conduit>
> >>>
> >>> </beans>
> >>>
> >>> Whenever i run my code, i get the following exception:
> >>>
> >>> Caused by: java.lang.RuntimeException: Invalid null input: name
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorizati
> >>> on(S pnegoAuthSupplier.java:80)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.HTTPConduit.setHeadersByAuthorizationP
> >>> olic y(HTTPConduit.java:771)>
> >>>
> >>> at
> >>> org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java
> >>> :54
> >>> 1) at
> >>>
> >>> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(Me
> >>> ssag eSenderInterceptor.java:46)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercep
> >>> torC hain.java:263)>
> >>>
> >>> at
> >>> org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:519)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:352)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:304)
> >>> at
> >>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:8
> >>> 8)
> >>> at
> >>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java
> >>> :13
> >>> 4) ... 2 more
> >>>
> >>> Caused by: javax.security.auth.login.LoginException: Invalid null
> >>> input: name>
> >>>
> >>> at
> >>> javax.security.auth.login.LoginContext.init(LoginContext.java:229
> >>> )
> >>> at
> >>> javax.security.auth.login.LoginContext.<init>(LoginContext.java:40
> >>> 3)
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(Spneg
> >>> oAut hSupplier.java:104)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(Spneg
> >>> oAut hSupplier.java:144)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorizati
> >>> on(S pnegoAuthSupplier.java:77)>
> >>>
> >>> ... 12 more
> >>>
> >>> This happens on both Windows and Linux.
> >>>
> >>> krb5.conf/krb5.ini is present and found by Java.
> >>>
> >>> On the other hand, when I leave the Username and password blank i
> >>> get an exception that no TGT could be aquired. Anyhow 'klist' on
> >>> both Windows and Linux states that there is a TGT available in the
> >>> cache.
> >>>
> >>> Caused by: java.lang.RuntimeException: No valid credentials provided
> >>> (Mechanism level: No valid credentials provided (Mechanism level:
> >>> Failed to find any Kerberos tgt))
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorizati
> >>> on(S pnegoAuthSupplier.java:82)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.HTTPConduit.setHeadersByAuthorizationP
> >>> olic y(HTTPConduit.java:771)>
> >>>
> >>> at
> >>> org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java
> >>> :54
> >>> 1) at
> >>>
> >>> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(Me
> >>> ssag eSenderInterceptor.java:46)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercep
> >>> torC hain.java:263)>
> >>>
> >>> at
> >>> org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:519)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:449)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:352)
> >>> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:304)
> >>> at
> >>> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:8
> >>> 8)
> >>> at
> >>> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java
> >>> :13
> >>> 4) ... 2 more
> >>>
> >>> Caused by: GSSException: No valid credentials provided (Mechanism
> >>> level: No valid credentials provided (Mechanism level: Failed to
> >>> find any Kerberos tgt))>
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.
> >>> java>>>
> >>> :450)>
> >>> :
> >>> at
> >>> sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.jav
> >>> a:2
> >>> 30) at
> >>> sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.jav
> >>> a:1
> >>> 62) at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(Spneg
> >>> oAut hSupplier.java:100)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(Spneg
> >>> oAut hSupplier.java:144)>
> >>>
> >>> at
> >>>
> >>> org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorizati
> >>> on(S pnegoAuthSupplier.java:77)>
> >>>
> >>> ... 12 more
> >>>
> >>> Caused by: GSSException: No valid credentials provided (Mechanism
> >>> level: Failed to find any Kerberos tgt)
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCreden
> >>> tial .java:130)>
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5Mech
> >>> Fact ory.java:106)>
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechF
> >>> acto ry.java:172)>
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.
> >>> java>>>
> >>> :209)>
> >>> :
> >>> at
> >>> sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.jav
> >>> a:1
> >>> 95) at
> >>> sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.jav
> >>> a:1
> >>> 62) at
> >>>
> >>> sun.security.jgss.spnego.SpNegoContext.GSS_initSecContext(SpNegoCont
> >>> ext. java:851)>
> >>>
> >>> at
> >>>
> >>> sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.
> >>> java>>>
> >>> :309)>
> >>> :
> >>> ... 17 more
> >>>
> >>> Did I miss anything in my configuration?
> >>>
> >>> Thanks in advance!
--
Michael Sliwak, M.Sc.
Raytion GmbH
Kaiser-Friedrich-Ring 74
40547 Düsseldorf
Fon +49-211-550266-0
Fax +49-211-550266-19
[email protected]
http://www.raytion.com