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/login/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/configuration"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://cxf.apache.org/configuration/security
http://cxf.apache.org/schemas/configuration/secu
rity.xsd
http://cxf.apache.org/transports/http/configurat
ion
http://cxf.apache.org/schemas/configuration/http
-conf.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/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:AuthorizationType>
</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.getAuthorization(S
pnegoAuthSupplier.java:80)>
at
org.apache.cxf.transport.http.HTTPConduit.setHeadersByAuthorizationPolic
y(HTTPConduit.java:771)>
at
org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:54
1) at
org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(Messag
eSenderInterceptor.java:46)>
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC
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:88)
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:403)
at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(SpnegoAut
hSupplier.java:104)>
at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(SpnegoAut
hSupplier.java:144)>
at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorization(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.getAuthorization(S
pnegoAuthSupplier.java:82)>
at
org.apache.cxf.transport.http.HTTPConduit.setHeadersByAuthorizationPolic
y(HTTPConduit.java:771)>
at
org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:54
1) at
org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(Messag
eSenderInterceptor.java:46)>
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC
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:88)
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.java:2
30) at
sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:1
62) at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(SpnegoAut
hSupplier.java:100)>
at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getToken(SpnegoAut
hSupplier.java:144)>
at
org.apache.cxf.transport.http.auth.SpnegoAuthSupplier.getAuthorization(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(Krb5InitCredential
.java:130)>
at
sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFact
ory.java:106)>
at
sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext(Krb5MechFacto
ry.java:172)>
at
sun.security.jgss.GSSManagerImpl.getMechanismContext(GSSManagerImpl.java
:209)>
at
sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:1
95) at
sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:1
62) at
sun.security.jgss.spnego.SpNegoContext.GSS_initSecContext(SpNegoContext.
java:851)>
at
sun.security.jgss.spnego.SpNegoContext.initSecContext(SpNegoContext.java
:309)>
... 17 more
Did I miss anything in my configuration?
Thanks in advance!
--
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
Talend Application Integration Division http://www.talend.com