Hi Aris,
I would not like to change the AuthorizationPolicy for this as we have a
quite special case here. Most other authorizations do not use oids. So I
asked on the irc what is a good way to do this and Sergey pointed me to
the message properties. These can be set in spring using
jaxws:properties on e.g. the jaxws:client and also programmatically so
this sounds like a good solution.
I have committed the change. I you have the chance it would be great if
you could test this against a Microsoft IIS and tell me which OID it
wants. In any case as we have positive feedback I will document the
feature on the website now.
Christian
Am 06.05.2011 14:51, schrieb Aris Tsaklidis:
Hi Christian,
I cannot comfirm that the change will work with every server. My Jboss 4.5.1
(+jboss negotiation module) uses SPNEGO as application-policy. Therefore I need
the SPNEGO_OID.
I would go with your suggestion to use an option for swithcing between kerberos
and spnego uid.
Maybe something like this:
public class AuthorizationPolicy {
@XmlElement(name = "UserName")
protected String userName;
@XmlElement(name = "Password")
protected String password;
@XmlElement(name = "AuthorizationType")
protected String authorizationType;
@XmlElement(name = "Authorization")
protected String authorization;
@XmlElement(name = "AuthorizationOid")
protected String authorizationOid;
...
}
public class SpnegoAuthSupplier implements HttpAuthSupplier {
public static final String KERBEROS_OID = "1.2.840.113554.1.2.2";
public static final String SPNEGO_OID = "1.3.6.1.5.5.2";
....
private byte[] getToken(AuthorizationPolicy proxyAuthPolicy, String spn)
throws GSSException,
LoginException {
GSSManager manager = GSSManager.getInstance();
GSSName serverName = manager.createName(spn, null);
// TODO Is it correct to use kerberos oid instead of spnego here?
Oid oid = new Oid(proxyAuthPolicy.getAuthorizationOid);
...
}
}
and then use:
HTTPConduit systemConduit = (HTTPConduit) systemClient.getConduit();
AuthorizationPolicy systemAuthPol = new AuthorizationPolicy();
systemAuthPol.setAuthorizationType("Negotiate");
systemAuthPol.setAuthorizationOid(SpnegoAuthSupplier.SPNEGO_OID);
systemConduit.setAuthorization(systemAuthPol);
Aris
-------- Original-Nachricht --------
Datum: Fri, 06 May 2011 13:31:03 +0200
Von: Christian Schneider<[email protected]>
An: [email protected]
Betreff: Re: CXF 2.4 - Kerberos SpnegoAuthSupplier - Message content from Soap
Response is null
Hi Aris,
thanks for the hard work.
A question. Can you confirm that the current cxf 2.4.0 code does not
work and that the change to Spnego OID works?
When I did the code I read that some servers work with OID spengo and
others with OID kerberos. So I am not sure if the change is good for
everyone.
In case we need both we will have to create an option to toggle it.
Christian
Am 06.05.2011 12:08, schrieb Aris Tsaklidis:
Found the problem.
I already mentioned that my old code was similiar to the cxf 2.4 code. I
kinda realized that with adding the AuthorizationType in my code I made
HTTPConduit call SpnegoAuthSupplier in the send process. So my kerberos
ticket was overwritten by the SpnegoAuthSupplier. So basically there had
to
be some error in the SpnegoAuthSupplier.
So i kinda compared my code with the SpnegoAuthSupplier and realized
that I
used the SPNEGO OID and cxf 2.4 used KERBEROS OID. I changed the
SpnegoAuthSupplier and buildet the transport project. Updated my
workbench
and it worked.
created a ticket with the working source code attached
https://issues.apache.org/jira/browse/CXF-3496
--
Christian Schneider
http://www.liquid-reality.de
CXF and Camel Architect
--
Christian Schneider
http://www.liquid-reality.de
CXF and Camel Architect