Hi Sergey, In my case the endpoint is a simple <jaxws:client> specified in the Spring app-context and injected to a few Controllers or similar classes.
The only extra thing is that we want to 'impersonate' or 'delegate' the user's credentials so that any call we do from the Web Service client appears as if it is being done by the logged in user (the Tomcat principal of the web app which is in fact the client of the web service). Josef -----Original Message----- From: Sergey Beryozkin [mailto:sberyoz...@gmail.com] Sent: 18 July 2012 14:33 To: users@cxf.apache.org Subject: Re: Kerberos authentication using delegation from Principal Ticket On 18/07/12 13:05, Sergey Beryozkin wrote: > Hi Christian, All > On 18/07/12 10:06, Christian Schneider wrote: >> Hi Sergey and Josef, >> >> in Kerberos there are two kinds of tickets. The Ticket Granting >> Ticket >> (TGT) together with a session key is the one issued for the user >> after he authenticates on his machine. This ticket then allows to get >> a Service Ticket (ST) for a certain server. This service ticket is >> typically then forwarded to the webserver during SPNEGO. >> >> So on the server side we can use the ST to authenticate the user but >> I am not sure how we can use it to get a Service Token for the next >> server. In standard Kerberos this is not possible as far as I know >> but Microsoft has a Kerberos extension that allows this. I am not >> sure though if this can be used from Java. >> >> In any case the username alone is obviously not enough to get another >> ticket. What may be possible is to establish an authentication >> context using subject.doAs after the authentication using the ST. In >> this context it may then be possible to get another ST but I am not >> sure how this works. >> >> So using an STS or Fediz may be the more solid way to solve this. >> > > The quick test shows that the the server side validator is capable of > getting GSSCredential using GSSContext.getDelegCred() (the method name > is a bit cryptic I have to say :-)) but only if the initiator > (SpnegoAuthSupplier) sets the cred delegation property to true (or I > assume if the relevant login process say at the Tomcat level allows > for it). > > Next, SpnegoAuthSupplier needs to check if GSSCredential is already > available on the message and if yes, just pass it to the context > creation call and let the context populate the token, without > attempting to log in again. > > The delegated GSSCredential can be set by the code, before a WS/RS > client is invoked again. > > I'm going to do few minor updates (at the JAX-RS level first) and then > push them to CXF interceptors, for cases like the one Josef is dealing > with easily handled at WS call level too I've done the updates but I'm going to wait with pushing the server side negotiate handler code to CXF interceptor. Colm has implemented the advanced WS-Security level Kerberos support, but I'm not sure it can be needed at the CXF WS end without WS-Sec Josef, in your case, how the endpoint is implemented ? Is CXF involved at all, except for the need to do the outbound call with CXF ? Sergey >> Christian >> >> Am 18.07.2012 01:15, schrieb Sergey Beryozkin: >>> Hi Josef >>> >>> On 18/07/12 00:03, Josef Bajada wrote: >>>> Hi Sergey, >>>> >>>> Yes the Principal will be available (i.e. the Username). >>>> >>>> I am thinking that we will need to generate the new token for the >>>> remote service (Sharepoint) from the original Token we had received >>>> from the browser. So we would need to do gsscontext.getDelegCr() to >>>> get the Delegate Credentials for the user and get the new token >>>> from that, so that we put it in the outbound HTTP header. >>>> >>>> As far as I know (again I could be mistaken), the old ticket would >>>> be only valid for our URL (SPN), and a new one would be needed for >>>> the Sharepoint URL. >>> >>> That is pretty interesting. I just happen to have spent few days >>> only on the subject, so hope our security experts can help :-). >>> >>> I thought that the tickets that can be 'forwarded' if the kdc >>> configuration allows for that. >>> >>> But may be not, may be gsscontext.getDelegCr() has to be called. >>> >>> I think that a case like this has to be managed in a simpler way in >>> CXF, though probably at the moment the way you suggest is the way to go. >>> >>> I've just added a jaxrs filter but I can definitely push most of the >>> code to the CXF in interceptor. This filter currently validates the >>> in service ticket only plus sets a basic SecurityContext. However it >>> can be configured to propagate the other useful info for >>> SpnegoAuthSupplier to reuse when this info is available on the >>> message... >>> >>> Hope you can make it all work - please share the code when you are >>> done and we can put some of it at the base CXF level >>> >>> Cheers, Sergey >> > > Josef Bajada Senior Technical Architect GO GO, Fra Diegu Street, Marsa, MRS 1501. t +356 2594 6826 w www.go.com.mt<http://www.go.com.mt> This email and any files or content transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately by e-mail if you have received this e-mail by mistake and delete this e-mail from your system. If you are not the intended recipient you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited. The Company and the originator of this email accept no liability for the content of this email, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. If you are not the intended recipient you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited. Warning: Although the Company and the originator have taken reasonable precautions to ensure no viruses are present in this email, the company cannot accept responsibility for any loss or damage arising from the use of this email or attachments. ________________________________